--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Commit 32116ed9f48b85a679796cbc1c1a698ad2a2c873
Parents : 7952bb9
Author : Mark Qvist <mark@unsigned.io>
Date : 2026-01-04T01:08:52+01:00
Updated build
Changes
25 files changed, 1864 insertions(+), 383 deletions(-)
Diff
diff --git a/docs/manual/Reticulum Manual.epub b/docs/manual/Reticulum Manual.epub
index 02c7df9..8654dc2 100644
Binary files a/docs/manual/Reticulum Manual.epub and b/docs/manual/Reticulum Manual.epub differ
diff --git a/docs/manual/Reticulum Manual.pdf b/docs/manual/Reticulum Manual.pdf
index 322748a..672ffeb 100644
Binary files a/docs/manual/Reticulum Manual.pdf and b/docs/manual/Reticulum Manual.pdf differ
diff --git a/docs/manual/_sources/gettingstartedfast.rst.txt b/docs/manual/_sources/gettingstartedfast.rst.txt
index 0ce5017..28caf4b 100644
--- a/docs/manual/_sources/gettingstartedfast.rst.txt
+++ b/docs/manual/_sources/gettingstartedfast.rst.txt
@@ -8,7 +8,7 @@ scenarios.
Standalone Reticulum Installation
-=============================================
+=================================
If you simply want to install Reticulum and related utilities on a system,
the easiest way is via the ``pip`` package manager:
@@ -254,14 +254,90 @@ In general it is recommended to use an I2P node if you want to host a publicly a
instance, while preserving anonymity. If you care more about performance, and a slightly
easier setup, use TCP.
+.. _bootstrapping-connectivity:
+
+Bootstrapping Connectivity
+==========================
+
+Reticulum is not a service you subscribe to, nor is it a single global network you "join". It is a *networking stack*; a toolkit for building communications systems that align with your specific values, requirements, and operational environment. The way you choose to connect to other Reticulum peers is entirely your own choice.
+
+One of the most powerful aspects of Reticulum is that it provides a multitude of tools to establish, maintain, and optimize connectivity. You can use these tools in isolation or combine them in complex configurations to achieve a vast array of goals.
+
+Whether your aim is to create a completely private, air-gapped network for your family; to build a resilient community mesh that survives infrastructure collapse; to connect far and wide to as many nodes as possible; or simply to maintain a reliable, encrypted link to a specific organization you care about, Reticulum provides the mechanisms to make it happen.
+
+There is no "right" or "wrong" way to build a Reticulum network, and you don't need to be a network engineer just to get started. If the information flows in the way you intend, and your privacy and security requirements are met, your configuration is a success. Reticulum is designed to make the most challenging and difficult scenarios attainable, even when other networking technologies fail.
+
+
+Finding Your Way
+^^^^^^^^^^^^^^^^
+
+When you first start using Reticulum, you need a way to obtain connectivity with the peers you want to communicate with. This is the process of **bootstrapping**.
+
+A common mistake in modern networking is the reliance on a few centralized, hard-coded entrypoints. If every user simply connects to the same list of public IP addresses found on a website, the network becomes brittle, centralized, and ultimately fails to deliver on the promise of decentralization.
+
+Reticulum encourages the approach of *organic growth*. Instead of relying on permanent static connections to distant servers, you can use temporary bootstrap connections to *discover* better, more relevant or local infrastructure. Once discovered, your system can automatically form stronger, more direct links to these peers, and discard the temporary bootstrap links. This results in a web of connections that are geographically relevant, resilient and efficient.
+
+It *is* possible to simply add a few public entrypoints to the ``[interfaces]`` section of your Reticulum configuration and be connected, but a better option is to enable :ref:`interface discovery<using-interface_discovery>` and either manually select relevant, local interfaces, or enable discovered interface auto-connection.
+
+A relevant option in this context is the :ref:`bootstrap only<interfaces-options>` interface option. This is an automated tool for better distributing connectivity. By enabling interface discovery and auto-connection, and marking an interface as ``bootstrap_only``, you tell Reticulum to use that interface primarliy to find connectivity options, and then disconnect it once sufficient entrypoints have been discovered. This helps create a network topology that favors locality and resilience over the simple centralization caused by using only a few static entrypoints.
+
+A good place to find interface definitions for bootstrapping connectivity is `rmap.world <https://rmap.world/>`_.
+
+
+Building Personal Infrastructure
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+You do not need a datacenter to be a meaningful part of the Reticulum ecosystem. In fact, the most important nodes in the network are often the smallest ones.
+
+We strongly encourage everyone, even home users, to think in terms of building **personal infrastructure**. Don't connect every phone, tablet, and computer in your house directly to a public internet gateway. Instead, repurpose an old computer, a Raspberry Pi, or a supported router to act as your own, personal **Transport Node**:
+
+* Your local Transport Node sits in your home, connected to your WiFi and perhaps a radio interface (like an RNode).
+* You configure this node with a ``bootstrap_only`` interface (perhaps a TCP tunnel to a wider network) and enable interface discovery.
+* While you sleep, work, or cook, your node listens to the network. It discovers other local community members, validates their Network Identities, and automatically establishes direct links.
+* Your personal devices now connect to your *local* node, which is integrated into a living, breathing local mesh. Your traffic flows through local paths provided by other real people in the community rather than bouncing off a distant server.
+
+**Don't wait for others to build the networks you want to see**. Every network is important, perhaps even most so those that support individual families and persons. Once enough of this personal, local infrastructure exist, connecting them directly to each other, without traversing the public Internet, becomes inevitable.
+
+
+Mixing Strategies
+^^^^^^^^^^^^^^^^^
+
+There is no requirement to commit to a single strategy. The most robust setups often mix static, dynamic, and discovered interfaces.
+
+* **Static Interfaces:** You maintain a permanent interface to a trusted friend or organization using a static configuration.
+* **Bootstrap Links:** You connect a ``bootstrap_only`` interface to a public gateway on the Internet to scan for new connectable peers or to regain connectivity if your other interfaces fail.
+* **Local Wide-Area Connectivity:** You run a ``RNodeInterface`` on a shared frequency, giving you completely self-sovereign and private wide-area access to both your own network and other Reticulum peers globally, without any "service providers" being able to control or monitor how you interact with people.
+
+By combining these methods, you create a system that is secure against single points of failure, adaptable to changing network conditions, and better integrated into your physical and social reality.
+
+
+Network Health & Responsibility
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+As you participate in the wider networks you discover and build, you will inevitably encounter peers that are misconfigured, malicious, or simply broken. To protect your resources and those of your local peers, you can utilize the :ref:`Blackhole Management<using-blackhole_management>` system.
+
+Whether you manually block a spamming identity or subscribe to a blackhole list maintained by a trusted Network Identity, these tools help ensure that *your* transport capacity is used for what *you* consider legitimate communication. This keeps your local segment efficient and contributes to the health of the wider network.
+
+
+Contributing to the Global Ret
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+If you have the means to host a stable node with a public IP address, consider becoming a :ref:`Public Entrypoint<hosting-entrypoints>`. By :ref:`publishing your interface as discoverable<interfaces-discoverable>`, you provide a potential connection point for others, helping the network grow and reach new areas.
+
+For guidelines on how to properly configure and secure a public gateway, refer to the :ref:`Hosting Public Entrypoints<hosting-entrypoints>` section.
Connect to the Public Testnet
-===========================================
+=============================
An experimental public testnet has been made accessible by volunteers in the community. You
can find interface definitions for adding to your ``.reticulum/config`` file on the
-`Reticulum Website <https://reticulum.network/connect.html>`_ or the
-`Community Wiki <https://github.com/markqvist/Reticulum/wiki/Community-Node-List>`_
+`Reticulum Website <https://reticulum.network/connect.html>`_, or the
+`Community Wiki <https://github.com/markqvist/Reticulum/wiki/Community-Node-List>`_.
+
+As development of Reticulum has transitioned away from the public Internet, and is now happening exclusively over Reticulum itself, the lists on the `Reticulum Website <https://reticulum.network/connect.html>`_ and the
+`Community Wiki <https://github.com/markqvist/Reticulum/wiki/Community-Node-List>`_ are no longer actively maintained, and any up-to-date connectivity information will have to be found elsewhere.
+
+For a while, these resources will likely still be a usable way to find bootstrap connections, that will allow you to discover other entrypoints to connect to, but it is highly recommended to also check community run projects like `rmap.world <https://rmap.world/>`_.
You can connect your devices or instances to one or more of these to gain access to any
Reticulum networks they are physically connected to. Simply add one or more interface
@@ -269,24 +345,18 @@ snippets to your config file in the ``[interface]`` section, like in the example
.. code:: ini
- # TCP/IP interface to the BetweenTheBorders Hub (community-provided)
- [[RNS Testnet BetweenTheBorders]]
+ # TCP/IP interface to the RNS Amsterdam Hub
+ [[RNS Testnet Amsterdam]]
type = TCPClientInterface
enabled = yes
- target_host = reticulum.betweentheborders.com
- target_port = 4242
+ target_host = amsterdam.connect.reticulum.network
+ target_port = 4965
.. tip::
- Ideally, set up a Reticulum Transport Node that your own devices can reach locally, and then
- connect that transport node to a couple of public entrypoints. This will provide efficient
- connections and redundancy in case any of them go down.
+ Don't rely on a single connection to a testnet entrypoint for everyday use. The testnet is often used for development and failure testing scenarios. Instead, read the :ref:`Bootstrapping Connectivity<bootstrapping-connectivity>` section.
-Many other Reticulum instances are connecting to this testnet, and you can also join it
-via other entry points if you know them. There is absolutely no control over the network
-topography, usage or what types of instances connect. It will also occasionally be used
-to test various failure scenarios, and there are no availability or service guarantees.
-Expect weird things to happen on this network, as people experiment and try out things.
+As the amount of global Reticulum nodes and entrypoints have grown to a substantial quantity, the public Amsterdam Testnet entrypoint is slated for de-commisioning in the first quarter of 2026. If your own instances rely on this entrypoint for connectivity, it is high time to start configuring alternatives. Read the :ref:`Bootstrapping Connectivity<bootstrapping-connectivity>` section for pointers.
.. warning::
It probably goes without saying, but *don't use the testnet entry-points as
@@ -295,12 +365,15 @@ Expect weird things to happen on this network, as people experiment and try out
connectivity solutions, if needed and applicable, or in most cases, simply
leave it up to the user which networks to connect to, and how.
+.. _hosting-entrypoints:
Hosting Public Entrypoints
-===========================================
+==========================
If you want to host a public (or private) entry-point to a Reticulum network over the
-Internet, this section offers some helpful pointers. You will need a machine, physical or
+Internet, this section offers some helpful pointers. Once you have set up your public entrypoint, it is a great idea to :ref:`make it discoverable over Reticulum<interfaces-discoverable>`.
+
+You will need a machine, physical or
virtual with a public IP address, that can be reached by other devices on the Internet.
The most efficient and performant way to host a connectable entry-point supporting many
@@ -348,7 +421,7 @@ If you are hosting an entry-point on an operating system that does not support
not be as performant.
Adding Radio Interfaces
-==============================================
+=======================
Once you have Reticulum installed and working, you can add radio interfaces with
any compatible hardware you have available. Reticulum supports a wide range of radio
hardware, and if you already have any available, it is very likely that it will
@@ -377,7 +450,7 @@ and propose adding an interface for the hardware.
Creating and Using Custom Interfaces
-===========================================
+====================================
While Reticulum includes a flexible and broad range of built-in interfaces, these
will not cover every conceivable type of communications hardware that Reticulum
@@ -404,53 +477,9 @@ ready to import and use RNS in your own programs. The next step will most
likely be to look at some :ref:`Example Programs<examples-main>`.
The entire Reticulum API is documented in the :ref:`API Reference<api-main>`
-chapter of this manual.
-
-
-Participate in Reticulum Development
-==============================================
-If you want to participate in the development of Reticulum and associated
-utilities, you'll want to get the latest source from GitHub. In that case,
-don't use pip, but try this recipe:
-
-.. code:: shell
-
- # Install dependencies
- pip install cryptography pyserial
-
- # Clone repository
- git clone https://github.com/markqvist/Reticulum.git
-
- # Move into Reticulum folder and symlink library to examples folder
- cd Reticulum
- ln -s ../RNS ./Examples/
-
- # Run an example
- python Examples/Echo.py -s
-
- # Unless you've manually created a config file, Reticulum will do so now,
- # and immediately exit. Make any necessary changes to the file:
- nano ~/.reticulum/config
-
- # ... and launch the example again.
- python Examples/Echo.py -s
-
- # You can now repeat the process on another computer,
- # and run the same example with -h to get command line options.
- python Examples/Echo.py -h
-
- # Run the example in client mode to "ping" the server.
- # Replace the hash below with the actual destination hash of your server.
- python Examples/Echo.py 174a64852a75682259ad8b921b8bf416
-
- # Have a look at another example
- python Examples/Filetransfer.py -h
+chapter of this manual. Before diving in, it's probably a good idea to read
+this manual in full, but at least start with the :ref:`Understanding Reticulum<understanding-main>` chapter.
-When you have experimented with the basic examples, it's time to go read the
-:ref:`Understanding Reticulum<understanding-main>` chapter. Before submitting
-your first pull request, it is probably a good idea to introduce yourself on
-the `disucssion forum on GitHub <https://github.com/markqvist/Reticulum/discussions>`_,
-or ask one of the developers or maintainers for a good place to start.
.. _install-guides:
diff --git a/docs/manual/_sources/interfaces.rst.txt b/docs/manual/_sources/interfaces.rst.txt
index 9954124..4c15e2f 100644
--- a/docs/manual/_sources/interfaces.rst.txt
+++ b/docs/manual/_sources/interfaces.rst.txt
@@ -911,6 +911,213 @@ beaconing functionality described above.
# small internal packet buffer.
flow_control = false
+.. _interfaces-discoverable:
+
+Discoverable Interfaces
+=======================
+
+Reticulum includes a powerful system for publishing your local interfaces to the wider network, allowing other peers to :ref:`discover, validate, and automatically connect to them<using-interface_discovery>`. This feature is particularly useful for creating decentralized networks where peers can dynamically find entrypoints, such as public Internet gateways or local radio access points, without relying on static configuration files or centralized directories.
+
+When an interface is made **discoverable**, your Reticulum instance will periodically broadcast an announce packet containing the connection details and parameters required for other peers to establish a connection. These announces are propagated over the network using the standard Reticulum announce mechanism using the ``rnstransport.discovery.interface`` destination type.
+
+.. note::
+ To use the interface discovery functionality, the ``LXMF`` module must be installed in your Python environment. You can install it using pip:
+
+ .. code:: sh
+
+ pip install lxmf
+
+
+Enabling Discovery
+------------------
+
+Interface discovery is enabled on a per-interface basis. To make a specific interface discoverable, you must add the ``discoverable`` option to that interface's configuration block and set it to ``yes``.
+
+.. code:: ini
+
+ [[My Public Gateway]]
+ type = BackboneInterface
+ ...
+ discoverable = yes
+
+Once enabled, Reticulum will automatically handle the generation, signing, stamping, and broadcasting of the discovery announces. It is not *required* to enable Transport to publish interface discovery information, but for most use cases where you want others to connect to you, you will likely want ``enable_transport`` set to ``yes`` in the ``[reticulum]`` section of your configuration.
+
+
+Discovery Parameters
+--------------------
+
+When ``discoverable`` is enabled, a variety of additional options become available to control how the interface is presented to the network. These parameters allow you to fine-tune the metadata, security requirements, and visibility of your interface.
+
+**Basic Metadata**
+
+``discovery_name``
+ A human-readable name for the interface. This name will be displayed to users on remote systems when they list discovered interfaces. If not specified, the interface name (the section header) will be used.
+
+``announce_interval``
+ The interval in minutes between successive discovery announces for this interface. Default is 360 minutes (6 hours). For stable, long-running infrastructure, higher intervals (12 to 22 hours) are usually sufficient and reduce network load. Minimum allowed value is 5 minutes (but expect to have your announces throttled if using intervals below one hour).
+
+**Connectivity Specification**
+
+``reachable_on``
+ Specifies the address that remote peers should use to connect to this interface.
+
+ * For TCP and Backbone interfaces, this is typically the public IP address or hostname. Do not include the port, this is fetched automatically from the interface.
+ * For I2P interfaces, this is usually the I2P ``b32`` address. This value is fetched automatically from the ``I2PInterface`` once it is up and connected to the I2P network, so you should not set this manually, unless you absolutely know what you're doing.
+
+ **Dynamic Resolution:** This option also accepts a path to an external executable script or binary. If a path is provided, Reticulum will execute the script and use its ``stdout`` as the reachability address. This is useful for devices behind dynamic DNS, NATs, or complex cloud environments where the external IP is not known locally. The script must simply print the address to stdout and exit.
+
+.. note:: **Script Execution Requirements:**
+ When using an executable script for ``reachable_on``, Reticulum expects the script to output only the IP address or hostname to ``stdout``, followed by a newline character. Any additional output or errors may cause the resolution to fail. Ensure the script has executable permissions and is robust against temporary network failures.
+
+A minimal example of a script that resolves the externally available, public IP of an internet-connected system could look like this:
+
+.. code:: bash
+
+ #!/bin/bash
+ curl -s ip.me
+ exit $?
+
+On a real system, you should make the script robust enough to deal with intermittent Internet or service failures, such that the script *always* returns a sensible value, or if not possible at least exits with a non-zero exit return code, so Reticulum knows the output is invalid.
+
+**Security & Cost**
+
+``discovery_stamp_value``
+ Defines the proof-of-work difficulty for the cryptographic stamp included in the announce. This value acts as a cost barrier to prevent network flooding. The default value is ``14``. Increasing this value makes it computationally more expensive to generate an announce, which can be useful to prevent spam on very large networks, but it also increases CPU load on your system when generating announces. Stamps are cached, and only generated if interface information changes, or at instance restart. If you have the computational resources, it is generally advisable to use as high a stamp value as possible.
+
+**Privacy & Encryption**
+
+``discovery_encrypt``
+ If set to ``yes``, the discovery announce payload will be encrypted. To decrypt the announce, remote peers must possess the *network identity* configured for your instance (see ``network_identity`` in the ``[reticulum]`` section). This allows you to publish private interfaces that are only discoverable to specific trusted networks.
+
+.. important::
+ If you enable ``discovery_encrypt`` but do not configure a valid ``network_identity`` in the ``[reticulum]`` section of your configuration, Reticulum will abort the interface discovery announce. Encryption requires a valid network identity key to function.
+
+``publish_ifac``
+ If set to ``yes``, the Interface Access Code (IFAC) name and passphrase for this interface will be included in the discovery announce. This allows peers to automatically configure the correct authentication parameters when connecting to the interface.
+
+**Physical Location**
+
+``latitude``, ``longitude``, ``height``
+ Optional physical coordinates for the interface. These are useful for mapping discovered interfaces geographically or for clients to automatically select the nearest access point. Coordinates should be in decimal degrees, height in meters.
+
+**Radio Parameters**
+
+For physical radio interfaces like ``RNodeInterface`` or ``KISSInterface``, the following optional parameters allow you to broadcast the operating frequency and characteristics, allowing clients to verify compatibility before connecting:
+
+``discovery_frequency``
+ The operating frequency in Hz. Auto-configured on RNode interfaces. Necessary on KISS-based radio interfaces and ``TCPClientInterfaces`` connecting to radio modems.
+
+``discovery_bandwidth``
+ The signal bandwidth in Hz. Auto-configured on RNode interfaces. Useful on KISS-based radio interfaces and ``TCPClientInterfaces`` connecting to radio modems.
+
+``discovery_modulation``
+ The modulation type or scheme. Auto-configured on RNode interfaces, but highly advisable to include on other radio-based interfaces.
+
+
+Interface Modes
+---------------
+
+When you enable discovery on an interface, Reticulum enforces certain interface modes to ensure the interface is actually useful for remote peers.
+
+If an interface is configured as ``discoverable``, but its mode is not explicitly set to ``gateway`` (for server-style interfaces like ``BackboneInterface`` or ``TCPServerInterface``) or ``access_point`` (for radio interfaces like ``RNodeInterface``), Reticulum will automatically configure the appropriate mode and log a notice.
+
+For example, if you enable discovery on a ``RNodeInterface`` without specifying the mode, Reticulum will automatically set it to ``access_point`` mode.
+
+Security Considerations
+-----------------------
+
+When making interfaces discoverable, you are effectively broadcasting an invitation to connect to your system. It is important to understand the security implications of the configuration options you choose.
+
+**Publishing Credentials**
+
+If you enable ``publish_ifac = yes``, your interface's authentication passphrase will be included in the announce. If you are operating a public network and want anyone to connect, this is acceptable. However, if you wish to restrict access to a specific group of users, you **must** enable ``discovery_encrypt = yes``. This ensures that only peers possessing the correct ``network_identity`` can decode the passphrase.
+
+**Topology Exposure**
+
+A discoverable interface announces its presence, location (if configured), and capabilities to the network. Even if the connection details are encrypted, the *fact* that a connectable node exists within a certain network becomes public information. In high-security or scenarios requiring operational secrecy, consider the implications of advertising your infrastructure's existence.
+
+Example Configuration
+---------------------
+
+Below is an example configuration for a public backbone gateway. This configuration publishes a high-value, publicly discoverable interface, that anyone can connect to.
+
+.. code:: ini
+
+ [[My Public Gateway]]
+ type = BackboneInterface
+ mode = gateway
+ listen_on = 0.0.0.0
+ port = 4242
+
+ # Enable Discovery
+ discoverable = yes
+
+ # Interface Details
+ discovery_name = Region A Public Entrypoint
+ announce_interval = 720
+
+ # Use external script to resolve dynamic IP
+ reachable_on = /usr/local/bin/get_external_ip.sh
+
+ # Generate high stamp value
+ discovery_stamp_value = 24
+
+ # Optional location data
+ latitude = 51.99714
+ longitude = -0.74195
+ height = 15
+
+The next example create an encrypted discovery-enabled interface, requiring a specific network identity to decode, and includes IFAC credentials for seamless authentication.
+
+.. code:: ini
+
+ [[My Private Gateway]]
+ type = BackboneInterface
+ mode = gateway
+ listen_on = 0.0.0.0
+ port = 5858
+ network_name = internal_1
+ passphrase = Mevpekyafshak5Wr
+
+ # Enable Discovery
+ discoverable = yes
+
+ # Interface Details
+ discovery_name = Region A Private Backbone
+ announce_interval = 720
+
+ # Use external script to resolve dynamic IP
+ reachable_on = /usr/local/bin/get_external_ip.sh
+
+ # Target stamp value
+ discovery_stamp_value = 22
+
+ # Encrypt announces for our network only
+ discovery_encrypt = yes
+
+ # Include credentials so trusted
+ # peers can connect automatically
+ publish_ifac = yes
+
+ # Optional location data
+ latitude = 34.06915
+ longitude = -118.44318
+ height = 15
+
+In the ``[reticulum]`` section of your configuration, you would define the network identity used for encryption as follows:
+
+.. code:: ini
+
+ [reticulum]
+ ...
+ # The identity used to sign/encrypt discovery announces
+ network_identity = ~/.reticulum/storage/identities/my_network_identity
+ ...
+
+With these configuration options applied, your Reticulum instance will actively participate in the network's discovery ecosystem. Other peers running Reticulum with discovery enabled will be able to see your interface, validate its cryptographic stamp, and (depending on their configuration) automatically connect to it.
+
+For information on how to use these discovered interfaces and configure your system to auto-connect to them, refer to the :ref:`Discovering Interfaces<using-interface_discovery>` chapter.
+
.. _interfaces-options:
Common Interface Options
@@ -991,6 +1198,15 @@ These can be used to control various aspects of interface behaviour.
option, to set the interface speed in *bits per second*.
+ * | The ``bootstrap_only`` option designates an interface as a temporary
+ bridge for initial connectivity. If this option is enabled, the
+ interface will be monitored and automatically detached once the
+ number of auto-connected interfaces reaches the limit configured by
+ ``autoconnect_discovered_interfaces``. This is particularly useful
+ for using a slow or expensive connection (such as a single LoRa
+ link or a remote TCP tunnel) solely to discover better local
+ infrastructure, which then supersedes the bootstrap interface.
+
.. _interfaces-modes:
Interface Modes
diff --git a/docs/manual/_sources/networks.rst.txt b/docs/manual/_sources/networks.rst.txt
index 3c40fd7..dd378d3 100644
--- a/docs/manual/_sources/networks.rst.txt
+++ b/docs/manual/_sources/networks.rst.txt
@@ -4,17 +4,47 @@
Building Networks
*****************
-This chapter will provide you with the knowledge needed to build networks with
-Reticulum, which can often be easier than using traditional stacks, since you
-don't have to worry about coordinating addresses, subnets and routing for an
+This chapter will provide you with the high-level knowledge needed to build networks with
+Reticulum. It will not, however tell you all you need to know to succesfully
+design and configure every kind of network you can imagine. For this, you will
+most likely need to read this manual in its entirity, invest significant time
+into experimenting with the stack, and learning functionality intuitively.
+
+Still, after reading this chapter, you should be well equipped to *start* that
+journey. While Reticulum is **fundamentally different** compared to other
+networking technologies, it can often be easier than using traditional stacks.
+If you've built networks before, you will probably have to forget, or at least
+temporarily ignore, a lot of things at this point. It will all makes sense in
+the end though. Hopefully.
+
+If you're used to protocols like IP, let's at least start with some relief:
+You don't have to worry about coordinating addresses, subnets and routing for an
entire network that you might not know how will evolve in the future. With
Reticulum, you can simply add more segments to your network when it becomes
necessary, and Reticulum will handle the convergence of the entire network
-automatically.
+automatically. There's plenty more neat aspects like that to Reticulum, but
+we're getting ahead of ourselves. Let's cover the basics first.
Concepts & Overview
--------------------
+Before you start building your own networks, it's important to understand the
+fundamental principles that distinguish Reticulum networks from traditional
+networking approaches. These principles shape how you design your network,
+what trade-offs you encounter, and what capabilities you can rely on.
+
+Reticulum is not a single network you "join", it is a toolkit for *creating* networks.
+You decide what mediums to use, how nodes connect, what trust boundaries exist,
+and what the network's purpose is. Reticulum provides the cryptographic foundation,
+the transport mechanisms, and the convergence algorithms that make your design
+workable. You provide the intent and the structure.
+
+This approach offers tremendous flexibility, but it requires thinking in terms of
+different abstractions than those used in conventional networking.
+
+Introductory Considerations
+^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
There are important points that need to be kept in mind when building networks
with Reticulum:
@@ -31,6 +61,11 @@ with Reticulum:
interconnect with much larger and higher bandwidth networks without issue.
Reticulum automatically manages the flow of information to and from various
network segments, and when bandwidth is limited, local traffic is prioritised.
+ You will, however, need to configure your interfaces correctly. If you tell
+ Reticulum to pass all announce traffic from a gigabit link to a LoRa interfaces,
+ it will try as best as possible to comply with this, while still respecting
+ bandwidth limits, but you *will* waste a lot of precious bandwidth and airtime,
+ and your LoRa network will not work very well.
* | Reticulum provides sender/initiator anonymity by default. There is no way
to filter traffic or discriminate it based on the source of the traffic.
@@ -89,81 +124,227 @@ Any number of interfaces can be configured, and Reticulum will automatically
decide which are suitable to use in any given situation, depending on where
traffic needs to flow.
-Example Scenarios
------------------
-
-This section illustrates a few example scenarios, and how they would, in general
-terms, be planned, implemented and configured.
-
-Interconnected LoRa Sites
-=========================
-
-An organisation wants to provide communication and information services to it's
-members, which are located mainly in three separate areas. Three suitable hill-top
-locations are found, where the organisation can install equipment: Site A, B and C.
-
-Since the amount of data that needs to be exchanged between users is mainly text-
-based, the bandwidth requirements are low, and LoRa radios are chosen to connect
-users to the network.
-
-Due to the hill-top locations found, there is radio line-of-sight between site A
-and B, and also between site B and C. Because of this, the organisation does not
-need to use the Internet to interconnect the sites, but purchases four Point-to-Point
-WiFi based radios for interconnecting the sites.
-
-At each site, a Raspberry Pi is installed to function as a gateway. A LoRa radio
-is connected to the Pi with a USB cable, and the WiFi radio is connected to the
-Ethernet port of the Pi. At site B, two WiFi radios are needed to be able to reach
-both site A and site C, so an extra Ethernet adapter is connected to the Pi in
-this location.
-
-Once the hardware has been installed, Reticulum is installed on all the Pis, and at
-site A and C, one interface is added for the LoRa radio, as well as one for the WiFi
-radio. At site B, an interface for the LoRa radio, and one interface for each WiFi
-radio is added to the Reticulum configuration file. The transport node option is
-enabled in the configuration of all three gateways.
-
-The network is now operational, and ready to serve users across all three areas.
-The organisation prepares a LoRa radio that is supplied to the end users, along
-with a Reticulum configuration file, that contains the right parameters for
-communicating with the LoRa radios installed at the gateway sites.
-
-Once users connect to the network, anyone will be able to communicate with anyone
-else across all three sites.
-
-Bridging Over the Internet
-==========================
-
-As the organisation grows, several new communities form in places too far away
-from the core network to be reachable over WiFi links. New gateways similar to those
-previously installed are set up for the new communities at the new sites D and E, but
-they are islanded from the core network, and only serve the local users.
-
-After investigating the options, it is found that it is possible to install an
-Internet connection at site A, and an interface on the Internet connection is
-configured for Reticulum on the Raspberry Pi at site A.
-
-A member of the organisation at site D, named Dori, is willing to help by sharing
-the Internet connection she already has in her home, and is able to leave a Raspberry
-Pi running. A new Reticulum interface is configured on her Pi, connecting to the newly
-enabled Internet interface on the gateway at site A. Dori is now connected to both
-the nodes at her own local site (through the hill-top LoRa gateway), and all the
-combined users of sites A, B and C. She then enables transport on her node, and
-traffic from site D can now reach everyone at site A, B and C, and vice versa.
-
-Growth and Convergence
-======================
-
-As the organisation grows, more gateways are added to keep up with the growing user
-base. Some local gateways even add VHF radios and packet modems to reach outlying users
-and communities that are out of reach for the LoRa radios and WiFi backhauls.
-
-As more sites, gateways and users are connected, the amount of coordination required
-is kept to a minimum. If one community wants to add connectivity to the next one
-over, it can simply be done without having to involve everyone or coordinate address
-space or routing tables.
-
-With the added geographical coverage, the operators at site A one day find that
-the original internet bridged interfaces are no longer utilised. The network has
-converged to be completely self-connected, and the sites that were once poorly
-connected outliers are now an integral part of the network.
+Destinations, Not Addresses
+^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+In traditional networking, addresses are allocated from a managed space. If you want to
+communicate with another node, you need to know its address, and that address
+must be unique within the network segment. This requires coordination, either
+through manual assignment, DHCP servers, or other allocation mechanisms.
+
+Reticulum replaces addresses with **destinations**. A destination is identified by a 16-byte
+hash (128 bits) derived from a SHA-256 hash of the destination's identifying
+characteristics. This hash serves as the address on the network. On the network, it
+is represented in binary, but when displayed to human users, it will usually look something like
+this ``<13425ec15b621c1d928589718000d814>``.
+
+The critical difference is that *any node can generate as many destinations as it
+needs, without coordination*. A destination's uniqueness is guaranteed by the
+collision resistance of SHA-256 and the inclusion of the node's public key in the
+hash calculation. Two nodes can both use the destination name
+``messenger.user.inbox``, but they will have different destination hashes because
+their public keys differ. Both can coexist on the same network without conflict.
+
+This has profound implications for network design:
+
+* **No address allocation planning:** You never need to reserve address ranges,
+ plan subnets, or coordinate with other network operators. Nodes simply generate
+ destinations and announce them.
+
+* **Global portability:** A destination is not tied to a physical location or
+ network segment. A node can move its destinations across interfaces, mediums,
+ or even between entirely separate Reticulum networks simply by sending an
+ announce on the new medium.
+
+* **Implicit authentication:** Because destinations are bound to public keys,
+ communication to a destination is inherently cryptographically authenticated.
+ Only the holder of the corresponding private key can decrypt and respond to
+ traffic addressed to that destination. This also makes application-level
+ authentication *much* simpler, since it can directly use the foundational
+ identity verification built into the core networking layer.
+
+* **Identity abstraction:** A single Reticulum Identity can create multiple
+ destinations. This allows a single entity (a person, a device, a service) to
+ present multiple endpoints without needing multiple cryptographic keypairs.
+
+
+Transport Nodes and Instances
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Reticulum distinguishes between two types of nodes: **Instances**
+and **Transport Nodes**. Every node running Reticulum is an Instance, but not
+every Instance is a Transport Node.
+
+A **Reticulum Instance** is any system running the Reticulum stack. It can create
+destinations, send and receive packets, establish links, and communicate with
+other nodes. It can also host destinations that are connectable for *anyone* else
+in the network. This means you can easily host globally available services from
+any location, including your home or office. Network-wide, global connectivity
+for all destinations is guaranteed, as long as there is *some* physical way to
+actually transport the packets. Instances are the default state and are appropriate for most end-user devices,
+such as phones, laptops, sensors, or any device that primarily consumes network services.
+
+A **Transport Node** is an Instance that has been explicitly configured to
+participate in network-wide transport. Transport nodes forward packets across
+hops, propagate announces, maintain path tables, and serve path requests on
+behalf of other nodes. When a destination sends an announce, Transport Nodes
+receive it, remember the path, and rebroadcast it to other interfaces. When a node
+needs to reach a destination it doesn't have a path for, Transport Nodes help
+resolve the path through the network.
+
+Even devices hosting services or serving content should probably just be configured
+as instances, and themselves connect to wider networks via a Transport Node.
+In some situations, this may not be practical though, and as an example, it is
+entirely viable to host a personal Transport Node on a Raspberry Pi, while it
+is at the same time running an LXMF propagation node, and hosting your personal
+site or files over Reticulum.
+
+The distinction is important. **Not** every node should be a Transport Node:
+
+* **Resource consumption:** Transport nodes maintain path tables, process
+ announces, and forward traffic. This requires memory and CPU resources that
+ may be limited on low-powered devices.
+
+* **Stability requirements:** Transport nodes contribute to network convergence.
+ If Transport Nodes frequently go offline, path tables become stale and
+ convergence suffers. Stable, always-on nodes make better Transport Nodes.
+
+* **Bandwidth considerations:** Transport nodes process and rebroadcast network
+ maintenance traffic. On very low-bandwidth mediums, having too many Transport
+ Nodes will consume capacity that should be used for actual data.
+
+In practice, a network typically has a relatively small number of Transport Nodes
+strategically placed to provide coverage and connectivity. End-user devices run
+as Instances, connecting through nearby Transport Nodes to reach the wider network.
+This pattern mirrors traditional networking where routers forward traffic while
+end hosts simply consume connectivity, but with the crucial difference that any
+node *can* become a router if needed, and the decision is yours to make based on
+your network's requirements.
+
+Transport nodes also function as distributed cryptographic keystores. When a
+destination announces itself, Transport Nodes cache the public key and destination
+information. Other nodes can request unknown public keys from the network, and
+Transport Nodes respond with the cached information. This eliminates the need for
+a central directory service while ensuring that public keys remain available
+throughout the network.
+
+Trustless Networking
+^^^^^^^^^^^^^^^^^^^^
+
+Traditional network security models assume high levels of trust at
+specific layers. You might trust your ISP to deliver packets without inspection,
+or trust your VPN provider to handle your traffic, or trust the network
+administrator to configure firewalls appropriately. These trust relationships
+create vulnerabilities and dependencies.
+
+Reticulum is designed to function in **open, trustless environments**. This
+means the protocol makes no assumptions about the trustworthiness of the network
+infrastructure, the other participants, or the transport mediums. Every aspect
+of communication is secured cryptographically:
+
+* **Traffic encryption:** All traffic to single destinations is encrypted using
+ ephemeral keys.
+
+* **Source anonymity:** Reticulum packets do not include source addresses.
+ An observer intercepting a packet cannot determine who sent it, only who it is
+ addressed to (unless IFAC is enabled, in which case nothing can be determined).
+ This provides initiator anonymity by default.
+
+* **Path verification:** The announce mechanism includes cryptographic signatures that
+ prove the authenticity of destination announcements.
+
+* **Unforgeable delivery confirmations:** When a destination proves receipt of a
+ packet, the proof is signed with the destination's identity key. This prevents
+ false acknowledgments and ensures reliable delivery verification.
+
+* **Interface authentication:** When using Interface Access Codes (IFAC), packets
+ on authenticated interfaces carry signatures derived from a shared secret. Only
+ nodes with the correct network name and passphrase can generate valid packets, allowing creation
+ of virtual private networks on shared mediums.
+
+The trustless design has important consequences for network design:
+
+* **Open-access networks are viable:** You can build networks that anyone can
+ join without pre-approval. Because traffic is encrypted and authenticated end-
+ to-end, participants cannot interfere with each other's private communication,
+ even if they share the same transport infrastructure.
+
+* **No traffic inspection or prioritization:** Because traffic contents and
+ sources are opaque to intermediate nodes, there is no mechanism for filtering,
+ prioritizing, or throttling traffic based on its type or origin. All traffic
+ is treated equally. From a neutrality perspective, this is a feature.
+
+* **Adversarial resilience:** The network can operate even if some nodes are
+ malicious or controlled by adversaries. While a malicious Transport Node could
+ refuse to forward certain traffic or drop packets, it cannot decrypt, modify,
+ or impersonate legitimate traffic. Redundant paths and multiple Transport Nodes
+ mitigate the impact of malicious nodes.
+
+Of course, you can also create closed networks. Interface Access
+Codes allow you to restrict participation on specific interfaces. Network
+Identities enable you to verify that discovered interfaces belong to trusted
+operators. Blackhole management lets you block malicious identities. Reticulum
+provides both the tools for open networks and the controls for closed ones. The
+choice is yours based on your requirements.
+
+
+Heterogeneous Connectivity
+^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+In conventional networking, mixing different transport mediums typically requires
+gateways, translation layers, and careful configuration. A WiFi network doesn't
+natively interoperate with a packet radio network without additional infrastructure,
+and you can't just download a car over a serial port, or send an encrypted message
+in a QR code.
+
+Reticulum treats **heterogeneity as a core premise**. The protocol is designed
+to seamlessly mix mediums with vastly different characteristics:
+
+* **Bandwidth:** LoRa links operating at a few hundred bits per second can
+ interconnect with gigabit Ethernet backbones. Reticulum automatically manages
+ the flow of information, prioritizing local traffic on slow segments while
+ allowing global convergence.
+
+* **Latency:** Satellite links with multi-second latency can coexist with local
+ links measured in milliseconds. The transport system handles timing, asynchronous
+ delivery and retransmissions transparently.
+
+* **Topology:** Point-to-point microwave links, broadcast radio networks,
+ switched Ethernet fabrics, and virtual tunnels over the Internet can all be
+ part of the same Reticulum network.
+
+* **Reliability:** Intermittent connections that come and go (such as mobile
+ devices or opportunistic radio contacts) can participate alongside always-on
+ infrastructure. Reticulum gracefully handles link loss and reconnection.
+
+This heterogeneity is achieved through several design elements:
+
+* **Expandable, medium-agnostic interface system:** Reticulum communicates with the physical
+ world through interface modules. Adding support for a new medium is a matter
+ of implementing an interface class. The protocol itself remains unchanged.
+
+* **Interface modes:** Different modes (``full``, ``gateway``, ``access_point``,
+ ``roaming``, ``boundary``) allow you to configure how interfaces interact with
+ the wider network based on their characteristics and role.
+
+* **Announce propagation rules:** Announces are forwarded between interfaces
+ according to rules that account for bandwidth limitations and interface modes.
+ Slow segments are not overwhelmed by traffic from fast segments.
+
+* **Local traffic prioritization:** When bandwidth is constrained, Reticulum
+ prioritizes announces for nearby destinations. This ensures that local
+ connectivity remains functional even when global convergence is incomplete.
+
+For network designers, this means you are free to use whatever mediums are
+available, affordable, or appropriate for your situation. You might use LoRa for
+wide-area low-bandwidth coverage, WiFi for local high-capacity links, I2P for
+anonymous Internet connectivity, and Ethernet for infrastructure backhauls, all
+within the same network. Reticulum handles the translation and coordination
+automatically.
+
+The key design consideration is not whether different mediums can work together
+(they can), but **how** they should work together based on your goals. A node
+with multiple interfaces spanning heterogeneous mediums needs to be configured
+with appropriate interface modes so that traffic flows efficiently. A gateway
+connecting a slow LoRa segment to a fast Internet backbone should be configured
+differently than a mobile device roaming between radio cells.
\ No newline at end of file
diff --git a/docs/manual/_sources/understanding.rst.txt b/docs/manual/_sources/understanding.rst.txt
index f9ac2aa..f7402b3 100644
--- a/docs/manual/_sources/understanding.rst.txt
+++ b/docs/manual/_sources/understanding.rst.txt
@@ -596,6 +596,82 @@ the transfer, integrity verification and reassembling the data on the other end.
of codes to reliably transfer any amount of data. They can be used to transfer data stored in memory,
or stream data directly from files.
+.. _understanding-network_identities:
+
+Network Identities
+==================
+
+In Reticulum, every peer and application utilizes a cryptographic **Identity** to verify authenticity and establish encrypted channels. While standard identities are typically used to represent a single user, device, or service, Reticulum introduces the concept of a **Network Identity** to represent a logical group of nodes or an entire community infrastructure.
+
+A Network Identity is, at its core, a standard Reticulum Identity keyset. However, its purpose and usage differ from a personal identity. Instead of identifying a single entity, a Network Identity acts as a shared credential that federates multiple independent Transport Instances under a single, verifiable administrative domain.
+
+
+Conceptual Overview
+-------------------
+
+You can think of a standard Reticulum Identity as a self-sovereign, privately created passport for a single person. A Network Identity, conversely, is akin to a cryptographic flag, or a charter that flies over a fleet of ships. It signifies that while the ships may operate independently and be physically distant, they belong to the same organization, follow the same protocols, and are expected to act in concert.
+
+When you configure a Network Identity on one or more of your nodes, you are effectively declaring that these nodes constitute a specific "network" within a broader Reticulum mesh. This allows other peers to recognize interfaces not just as "a node named Alice", but as "a gateway belonging to The Eastern Ret Of Freedom".
+
+
+Current Usage
+-------------
+
+At present, the primary function of a Network Identity is within the :ref:`Interface Discovery<using-interface_discovery>` system.
+
+When a Transport Instance broadcasts a discovery announce for an interface, it can optionally sign that announce with a Network Identity, instead of just its local transport identity. Remote peers receiving the announce can then verify the signature. This provides functionality for two important distinctions:
+
+1. **Authenticity:** It proves that the interface was published by an operator who possesses the private key for that Network Identity.
+2. **Trust Boundaries:** It allows users to configure their systems to only accept and connect to interfaces that belong to specific Network Identities, effectively creating "whitelisted" zones of trusted infrastructure.
+
+.. note::
+ If you enable encryption on your discovery announces, the Network Identity is used as the shared secret. Only peers who have been explicitly provided with the Network Identity's full keyset (and have it configured locally) will be able to decrypt and utilize the connection details.
+
+ This functionality will be expanded in the future, so that peers with delegated keys can be allowed to decrypt discovery announces without holding the root network key. Currently, the functionality is sufficient for sharing interface information privately where you control all nodes that must decrypt the discovered interfaces.
+
+
+Future Implications
+-------------------
+
+While the current implementation focuses on interface discovery, the concept of Network Identities serves as the foundational building block for future Reticulum features designed to support large-scale, organic mesh formation.
+
+As the ecosystem evolves, Network Identities will facilitate:
+
+* **Distributed Name Resolution:** A system where networks can publish name-to-identity mappings, allowing human-readable names to resolve without centralized servers.
+* **Service Publishing:** Networks will be able to announce specific capabilities, services, or information endpoints available publicly or to their members.
+* **Inter-Network Federation:** Trust relationships between different networks, allowing for seamless but managed flow of traffic and information across distinct administrative boundaries.
+* **Distributed Blackhole Management:** A reputation-based system for blackhole list distribution, where trusted Network Identities can sign and publish lists of blackholed identities. This allows communities to collaboratively enforce security standards and filter spam or malicious identities across the parts of the wider mesh that they are responsible for.
+
+By adopting the use of Network Identities now, you are preparing your infrastructure to be compatible with this future functionality.
+
+
+Creating and Using a Network Identity
+-------------------------------------
+
+Since a Network Identity is simply a standard Reticulum Identity, you create one using the built-in tools.
+
+1. **Generate the Identity:**
+ Use the ``rnid`` utility to generate a new identity file that will serve as your Network Identity.
+
+ .. code:: sh
+
+ $ rnid -g ~/.reticulum/storage/identities/my_network
+
+2. **Distribute the Public Key:**
+ The public key must be distributed to any Transport Instance that needs to verify your network's announces and discovery information. By default, if your node is set up to use a network identity, this happens automatically (using the standard announce mechanism).
+
+3. **Configure Instances:**
+ In the ``[reticulum]`` section of the configuration file on every node within your network, point the ``network_identity`` option to the file you created.
+
+ .. code:: ini
+
+ [reticulum]
+ ...
+ network_identity = ~/.reticulum/storage/identities/my_network
+ ...
+
+Once configured, your instances will automatically utilize this identity for signing discovery announces (and potentially decrypting network-private information), presenting a unified front to the wider network.
+
.. _understanding-referencesystem:
Reference Setup
diff --git a/docs/manual/_sources/using.rst.txt b/docs/manual/_sources/using.rst.txt
index 9b03316..b0ec654 100644
--- a/docs/manual/_sources/using.rst.txt
+++ b/docs/manual/_sources/using.rst.txt
@@ -338,8 +338,8 @@ Filter output to only show some interfaces:
.. code:: text
usage: rnstatus [-h] [--config CONFIG] [--version] [-a] [-A]
- [-l] [-s SORT] [-r] [-j] [-R hash] [-i path]
- [-w seconds] [-v] [-m] [-mi seconds] [filter]
+ [-l] [-t] [-s SORT] [-r] [-j] [-R hash] [-i path]
+ [-w seconds] [-d] [-D] [-m] [-I seconds] [-v] [filter]
Reticulum Network Stack Status
@@ -353,16 +353,20 @@ Filter output to only show some interfaces:
-a, --all show all interfaces
-A, --announce-stats show announce stats
-l, --link-stats show link stats
- -s SORT, --sort SORT sort interfaces by [rate, traffic, rx, tx, announces, arx, atx, held]
+ -t, --totals display traffic totals
+ -s, --sort SORT sort interfaces by [rate, traffic, rx, tx, rxs, txs,
+ announces, arx, atx, held]
-r, --reverse reverse sorting
-j, --json output in JSON format
- -R hash transport identity hash of remote instance to get status from (requires -i)
+ -R hash transport identity hash of remote instance to get status from
-i path path to identity used for remote management
-w seconds timeout before giving up on remote queries
- -v, --verbose
+ -d, --discovered list discovered interfaces
+ -D show details and config entries for discovered interfaces
-m, --monitor continuously monitor status
- -I seconds, --monitor-interval seconds
+ -I, --monitor-interval seconds
refresh interval for monitor mode (default: 1)
+ -v, --verbose
.. note::
@@ -466,6 +470,7 @@ Decrypt a file using the Reticulum Identity it was encrypted for:
-B, --base32 Use base32-encoded input and output
--version show program's version number and exit
+.. _utility-rnpath:
The rnpath Utility
====================
@@ -487,21 +492,23 @@ Resolve path to a destination:
.. code:: text
- usage: rnpath [-h] [--config CONFIG] [--version] [-t] [-m hops]
- [-r] [-d] [-D] [-x] [-w seconds] [-R hash] [-i path]
- [-W seconds] [-j] [-v] [destination]
+ usage: rnpath [-h] [--config CONFIG] [--version] [-t] [-m hops] [-r] [-d] [-D]
+ [-x] [-w seconds] [-R hash] [-i path] [-W seconds] [-b] [-B] [-U]
+ [--duration DURATION] [--reason REASON] [-p] [-j] [-v]
+ [destination] [list_filter]
- Reticulum Path Discovery Utility
+ Reticulum Path Management Utility
positional arguments:
destination hexadecimal hash of the destination
+ list_filter filter for remote blackhole list view
options:
-h, --help show this help message and exit
--config CONFIG path to alternative Reticulum config directory
--version show program's version number and exit
-t, --table show all known paths
- -m hops, --max hops maximum hops to filter path table by
+ -m, --max hops maximum hops to filter path table by
-r, --rates show announce rate info
-d, --drop remove the path to a destination
-D, --drop-announces drop all queued announces
@@ -510,6 +517,13 @@ Resolve path to a destination:
-R hash transport identity hash of remote instance to manage
-i path path to identity used for remote management
-W seconds timeout before giving up on remote queries
+ -b, --blackholed list blackholed identities
+ -B, --blackhole blackhole identity
+ -U, --unblackhole unblackhole identity
+ --duration DURATION duration of blackhole enforcement in hours
+ --reason REASON reason for blackholing identity
+ -p, --blackholed-list
+ view published blackhole list for remote transport instance
-j, --json output in JSON format
-v, --verbose
@@ -622,13 +636,20 @@ Or fetch a file from the remote system:
$ rncp --fetch ~/path/to/file.tgz 73cbd378bb0286ed11a707c13447bb1e
+The default identity file is stored in ``~/.reticulum/identities/rncp``, but you can use
+another one, which will be created if it does not already exist
+
+.. code:: text
+
+ $ rncp ~/path/to/file.tgz 73cbd378bb0286ed11a707c13447bb1e -i /path/to/identity
+
**All Command-Line Options**
.. code:: text
usage: rncp [-h] [--config path] [-v] [-q] [-S] [-l] [-F] [-f]
[-j path] [-b seconds] [-a allowed_hash] [-n] [-p]
- [-w seconds] [--version] [file] [destination]
+ [-i identity] [-w seconds] [--version] [file] [destination]
Reticulum File Transfer Utility
@@ -653,6 +674,7 @@ Or fetch a file from the remote system:
-a allowed_hash allow this identity (or add in ~/.rncp/allowed_identities)
-n, --no-auth accept requests from anyone
-p, --print-identity print identity and destination info and exit
+ -i identity path to identity to use
-w seconds sender timeout before giving up
-P, --phy-rates display physical layer transfer rates
--version show program's version number and exit
@@ -813,6 +835,104 @@ to create and provision new :ref:`RNodes<rnode-main>` from any supported hardwar
For more information on how to create your own RNodes, please read the :ref:`Creating RNodes<rnode-creating>`
section of this manual.
+.. _using-interface_discovery:
+Discovering Interfaces
+----------------------
+
+Reticulum includes built-in functionality for discovering connectable interfaces over Reticulum itself. This is particularly useful in situations where you want to do one or more of the following:
+
+* Discover connectable entrypoints available on the Internet
+* Find connectable radio access points in the physical world
+* Maintain connectivity to RNS instances with unknown or changing IP addresses
+
+Discovered interfaces can be **auto-connected** by Reticulum, which makes it possible to create setups where an arbitrary interface can act simply as a bootstrap connection, that can be torn down again once more suitable interfaces have been discovered and connected.
+
+The interface discovery mechanism uses announces sent over Reticulum itself, and supports both publicly readable interfaces and private, encrypted discovery, that can only be decoded by specified *network identities*. It is also possible to specify which network identities should be considered valid sources for discovered interfaces, so that interfaces published by unknown entities are ignored.
+
+.. note::
+ A *network identity* is a normal Reticulum identity keyset that can be used by
+ one or more transport nodes to identify them as belonging to the same overall
+ network. In the context of interface discovery, this makes it easy to manage
+ connecting to only the particular networks you care about, even if those networks
+ utilize many individual physical transport node.
+
+ This also makes it convenient to auto-connect discovered interfaces only for networks you have some level of trust in.
+
+For information on how to make your interfaces discoverable, see the :ref:`Discoverable Interfaces<interfaces-discoverable>` chapter of this manual. The current section will focus on how to actually *discover and connect to* interfaces available on the network.
+
+In its most basic form, enabling interface discovery is as simple as setting ``discover_interfaces`` to ``true`` in your Reticulum config:
+
+.. code:: text
+
+ [reticulum]
+ ...
+ discover_interfaces = yes
+ ...
+
+Once this option is enabled, your RNS instance will start listening for interface discovery announces, and store them for later use or inspection. You can list discovered interfaces with the ``rnstatus`` utility:
+
+.. code:: text
+
+ $ rnstatus -d
+
+ Name Type Status Last Heard Value Location
+ -------------------------------------------------------------------------
+ Sideband Hub Backbone ✓ Available 1h ago 16 46.2316, 6.0536
+ RNS Amsterdam Backbone ✓ Available 32m ago 16 52.3865, 4.9037
+
+
+You can view more detailed information about discovered interfaces, including configuration snippets for pasting directly into your ``[interfaces]`` config, by using the ``rnstatus -D`` option:
+
+.. code:: text
+
+ $ rnstatus -D sideband
+
+ Transport ID : 521c87a83afb8f29e4455e77930b973b
+ Name : Sideband Hub
+ Type : BackboneInterface
+ Status : Available
+ Transport : Enabled
+ Distance : 2 hops
+ Discovered : 9h and 40m ago
+ Last Heard : 1h and 15m ago
+ Location : 46.2316, 6.0536
+ Address : sideband.connect.reticulum.network:7822
+ Stamp Value : 16
+
+ Configuration Entry:
+ [[Sideband Hub]]
+ type = BackboneInterface
+ enabled = yes
+ remote = sideband.connect.reticulum.network
+ target_port = 7822
+ transport_identity = 521c87a83afb8f29e4455e77930b973b
+
+In addition to providing local interface discovery information and control, the ``rnstatus`` utility can export discovered interface data in machine-readable JSON format using the ``rnstatus -d --json`` option. This can be useful for exporting the data to external applications such as status pages, access point maps and similar.
+
+To control what sources are considered valid for discovered sources, additional
+configuration options can be specified for the interface discovery system.
+
+* The ``interface_discovery_sources`` option is a list of the network or transport identities from which interfaces will be accepted. If this option is set, all others will be ignored. If this option is not set, discovered interfaces will be accepted from any source, but are still subject to stamp value requirements.
+
+* The ``required_discovery_value`` options specifies the minimum stamp value required for the interface announce to be considered valid. To make it computationally difficult to spam the network with a large number of defunct or malicious interfaces, each announced interface requires a valid cryptographical stamp, of configurable difficulty value.
+
+* The ``autoconnect_discovered_interfaces`` value defaults to ``0``, and specifies the maximum number of discovered interfaces that should be auto-connected at any given time. If set to a number greater than ``0``, Reticulum automatically manages discovered interface connections, and will bring discovered interfaces up and down based on availability. You can at any time add discovered interfaces to your configuration manually, to persistently keep them available.
+
+* The ``network_identity`` option specifies the *network identity* for this RNS instance. This identity is used both to sign (and potentially encrypt) *outgoing* interface discovery announces, and to decrypt incoming discovery information.
+
+The configuration snippet below contains an example of setting these additional configuration options:
+
+.. code:: text
+
+ [reticulum]
+ ...
+ discover_interfaces = yes
+ interface_discovery_sources = 521c87a83afb8f29e4455e77930b973b
+ required_discovery_value = 16
+ autoconnect_discovered_interfaces = 3
+ network_identity = ~/.reticulum/storage/identities/my_network
+ ...
+
Remote Management
-----------------
@@ -838,6 +958,130 @@ in the Reticulum configuration file:
For a complete example configuration, you can run ``rnsd --exampleconfig``.
+.. _using-blackhole_management:
+
+Blackhole Management
+--------------------
+
+Reticulum networks are fundamentally permissionless and open, allowing anyone with a compatible interface to participate. While this openness is essential for a resilient and decentralized network, it also exposes the network to potential abuse, such as peers flooding the network with excessive announce broadcasts or other forms of resource exhaustion.
+
+The **Blackhole** system provides tools to help manage this problem. It allows operators and individual users to block specific identities at the Transport layer, preventing them from propagating announces through your node, and for other nodes to reach them through your network.
+
+.. note::
+
+ There is fundamentally **no way** to *globally* block or censor any identity or destination in Reticulum networks. The blackhole functionality will prevent announces from (and traffic to) all destinations associated with the blackholed identity *on your own network segments only*.
+
+ This provides users and operators with control over what they want to allow *on their own network segments*, but there is no way to globally censor or remove an identity, as long as *someone* is willing to provide transport for it.
+
+This functionality serves a dual purpose:
+
+* **For Individual Users:** It offers a simple way to maintain a quiet and efficient local network by manually blocking spammy or unwanted peers.
+* **For Network Operators:** It enables the creation of federated, community-wide security standards. By publishing and sharing blackhole lists, operators can protect large infrastructures and distribute spam filtering rules across the mesh without manual intervention.
+
+
+Local Blackhole Management
+==========================
+
+The most immediate way to manage unwanted identities is through manual configuration using the ``rnpath`` utility. This allows you to instantly block or unblock specific identities on your local Transport Instance.
+
+**Blackholing an Identity**
+
+To block an identity, use the ``-B`` (or ``--blackhole``) flag followed by the identity hash. You can optionally specify a duration and a reason, which are useful for logging and future reference.
+
+.. code:: text
+
+ $ rnpath -B 3a4f8b9c1d2e3f4g5h6i7j8k9l0m1n2o
+
+You can also add a duration (in hours) and a reason:
+
+.. code:: text
+
+ $ rnpath -B 3a4f8b9c1d2e3f4g5h6i7j8k9l0m1n2o --duration 24 --reason "Excessive announces"
+
+**Lifting Blackholes**
+
+To remove an identity from the blackhole, use the ``-U`` (or ``--unblackhole``) flag:
+
+.. code:: text
+
+ $ rnpath -U 3a4f8b9c1d2e3f4g5h6i7j8k9l0m1n2o
+
+**Viewing the Blackhole List**
+
+To see all identities currently blackholed on your local instance, use the ``-b`` (or ``--blackholed``) flag:
+
+.. code:: text
+
+ $ rnpath -b
+
+ <3a4f8b9c1d2e3f4g5h6i7j8k9l0m1n2o> blackholed for 23h, 56m (Excessive announces)
+ <399ea050ce0eed1816c300bcb0840938> blackholed indefinitely (Announce spam)
+ <d56a4fa02c0a77b3575935aedd90bdb2> blackholed indefinitely (Announce spam)
+ <2b9ec651326d9bc274119054c70fb75e> blackholed indefinitely (Announce spam)
+ <1178a8f1fad405bf2ad153bf5036bdfd> blackholed indefinitely (Announce spam)
+
+
+
+Automated List Sourcing
+=======================
+
+Manually blocking identities is effective for immediate threats, but maintaining an up-to-date blocklist for a large network is impractical. Reticulum supports **automated list sourcing**, allowing your node to subscribe to blackhole lists maintained by trusted peers, or a central authority you manage yourself.
+
+.. warning:: **Verify Before Subscribing!**
+ Subscribing to a blackhole source is a powerful action that grants that source the ability to dictate who you can communicate with. Before adding a source to your configuration, verify that the maintainer aligns with your usage policy and values. Blindly subscribing to untrusted lists could inadvertently block legitimate peers or essential services.
+
+When enabled, your Transport Instance will periodically (approximately once per hour) connect to configured sources, retrieve their latest blackhole lists, and automatically merge them into your local blocklist. This provides "set-and-forget" protection for both individual users and large networks.
+
+**Configuration**
+
+To enable automated sourcing, add the ``blackhole_sources`` option to the ``[reticulum]`` section of your configuration file. This option accepts a comma-separated list of Transport Identity hashes that you trust to provide valid blackhole lists.
+
+.. code:: ini
+
+ [reticulum]
+ ...
+ # Automatically fetch blackhole lists from these trusted sources
+ blackhole_sources = 521c87a83afb8f29e4455e77930b973b, 68a4aa91ac350c4087564e8a69f84e86
+ ...
+
+**How It Works**
+
+1. The ``BlackholeUpdater`` service runs in the background.
+2. For every identity hash listed in ``blackhole_sources``, it attempts to establish a temporary link to the destination ``rnstransport.info.blackhole``.
+3. It requests the ``/list`` path, which returns a dictionary of blocked identities and their associated metadata.
+4. The received list is merged with your local ``blackholed_identities`` database.
+5. The lists are persisted to disk, ensuring they survive restarts.
+
+.. note::
+ You can verify the external lists you are subscribed to, and their contents, without importing them by using ``rnpath -p``. See the :ref:`rnpath utility documentation<utility-rnpath>` for details on querying remote blackhole lists.
+
+
+Publishing Blackhole Lists
+==========================
+
+If you are operating a public gateway, a community hub, or simply wish to share your blocklist with others, you can configure your instance to act as a blackhole list publisher. This allows other nodes to subscribe to *your* definitions of unwanted traffic.
+
+**Enabling Publishing**
+
+To publish your local blackhole list, enable the ``publish_blackhole`` option in the ``[reticulum]`` section:
+
+.. code:: ini
+
+ [reticulum]
+ ...
+ publish_blackhole = yes
+ ...
+
+When this is enabled, your Transport Instance will register a request handler at ``rnstransport.info.blackhole``. Any peer that connects to this destination and requests ``/list`` will receive the complete set of identities currently present in your local blackhole database.
+
+**Federation and Trust**
+
+The blackhole system relies on the trust relationship between the subscriber and the publisher. By subscribing to a source, you are implicitly trusting that source to only block identities that are genuinely detrimental to the network.
+
+As the ecosystem matures, this system is designed to integrate with **Network Identities**. This allows communities to verify that a published blackhole list is actually provided by a specific network or organization with a certain level of reputation and trustworthiness, adding a layer of cryptographic trust to the federation process. This prevents malicious actors from publishing fake lists intended to censor legitimate traffic.
+
+For operators, this creates a scalable model where maintaining a single high-quality blocklist can protect thousands of downstream peers, drastically reducing the administrative overhead of network hygiene.
+
Improving System Configuration
------------------------------
diff --git a/docs/manual/_sources/whatis.rst.txt b/docs/manual/_sources/whatis.rst.txt
index 76afaa6..233c95d 100644
--- a/docs/manual/_sources/whatis.rst.txt
+++ b/docs/manual/_sources/whatis.rst.txt
@@ -188,6 +188,4 @@ Caveat Emptor
Reticulum is an experimental networking stack, and should be considered as
such. While it has been built with cryptography best-practices very foremost in
mind, it has not yet been externally security audited, and there could very well be
-privacy-breaking bugs. To be considered secure, Reticulum needs a thorough
-security review by independent cryptographers and security researchers. If you
-want to help out with this, or can help sponsor an audit, please do get in touch.
\ No newline at end of file
+privacy-breaking bugs.
\ No newline at end of file
diff --git a/docs/manual/_static/documentation_options.js b/docs/manual/_static/documentation_options.js
index d0fab5f..c891ba6 100644
--- a/docs/manual/_static/documentation_options.js
+++ b/docs/manual/_static/documentation_options.js
@@ -1,5 +1,5 @@
const DOCUMENTATION_OPTIONS = {
- VERSION: '1.0.5',
+ VERSION: '1.1.0',
LANGUAGE: 'en',
COLLAPSE_INDEX: false,
BUILDER: 'html',
diff --git a/docs/manual/examples.html b/docs/manual/examples.html
index f624d1e..d4ab2a8 100644
--- a/docs/manual/examples.html
+++ b/docs/manual/examples.html
@@ -7,7 +7,7 @@
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
- <title>Code Examples - Reticulum Network Stack 1.0.5 documentation</title>
+ <title>Code Examples - Reticulum Network Stack 1.1.0 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
@@ -180,7 +180,7 @@
</label>
</div>
<div class="header-center">
- <a href="index.html"><div class="brand">Reticulum Network Stack 1.0.5 documentation</div></a>
+ <a href="index.html"><div class="brand">Reticulum Network Stack 1.1.0 documentation</div></a>
</div>
<div class="header-right">
<div class="theme-toggle-container theme-toggle-header">
@@ -204,7 +204,7 @@
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
</div>
- <span class="sidebar-brand-text">Reticulum Network Stack 1.0.5 documentation</span>
+ <span class="sidebar-brand-text">Reticulum Network Stack 1.1.0 documentation</span>
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
@@ -3660,7 +3660,7 @@ will be fully on-par with natively included interfaces, including all supported
</aside>
</div>
-</div><script src="_static/documentation_options.js?v=d55fa986"></script>
+</div><script src="_static/documentation_options.js?v=fc837d61"></script>
<script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
diff --git a/docs/manual/forhumans.html b/docs/manual/forhumans.html
index fdaf54b..11a9808 100644
--- a/docs/manual/forhumans.html
+++ b/docs/manual/forhumans.html
@@ -7,7 +7,7 @@
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
- <title>An Explanation of Reticulum for Human Beings - Reticulum Network Stack 1.0.5 documentation</title>
+ <title>An Explanation of Reticulum for Human Beings - Reticulum Network Stack 1.1.0 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
@@ -180,7 +180,7 @@
</label>
</div>
<div class="header-center">
- <a href="index.html"><div class="brand">Reticulum Network Stack 1.0.5 documentation</div></a>
+ <a href="index.html"><div class="brand">Reticulum Network Stack 1.1.0 documentation</div></a>
</div>
<div class="header-right">
<div class="theme-toggle-container theme-toggle-header">
@@ -204,7 +204,7 @@
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
</div>
- <span class="sidebar-brand-text">Reticulum Network Stack 1.0.5 documentation</span>
+ <span class="sidebar-brand-text">Reticulum Network Stack 1.1.0 documentation</span>
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
@@ -291,7 +291,7 @@
</aside>
</div>
-</div><script src="_static/documentation_options.js?v=d55fa986"></script>
+</div><script src="_static/documentation_options.js?v=fc837d61"></script>
<script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
diff --git a/docs/manual/genindex.html b/docs/manual/genindex.html
index 4c10597..5f6a8bb 100644
--- a/docs/manual/genindex.html
+++ b/docs/manual/genindex.html
@@ -5,7 +5,7 @@
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="#"><link rel="search" title="Search" href="search.html">
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
- <!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 --><title>Index - Reticulum Network Stack 1.0.5 documentation</title>
+ <!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 --><title>Index - Reticulum Network Stack 1.1.0 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
@@ -178,7 +178,7 @@
</label>
</div>
<div class="header-center">
- <a href="index.html"><div class="brand">Reticulum Network Stack 1.0.5 documentation</div></a>
+ <a href="index.html"><div class="brand">Reticulum Network Stack 1.1.0 documentation</div></a>
</div>
<div class="header-right">
<div class="theme-toggle-container theme-toggle-header">
@@ -202,7 +202,7 @@
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
</div>
- <span class="sidebar-brand-text">Reticulum Network Stack 1.0.5 documentation</span>
+ <span class="sidebar-brand-text">Reticulum Network Stack 1.1.0 documentation</span>
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
@@ -284,15 +284,17 @@
</li>
<li><a href="reference.html#RNS.RawChannelReader.add_ready_callback">add_ready_callback() (RNS.RawChannelReader method)</a>
</li>
- </ul></td>
- <td style="width: 33%; vertical-align: top;"><ul>
<li><a href="reference.html#RNS.Resource.advertise">advertise() (RNS.Resource method)</a>
</li>
+ </ul></td>
+ <td style="width: 33%; vertical-align: top;"><ul>
<li><a href="reference.html#RNS.Destination.announce">announce() (RNS.Destination method)</a>
</li>
<li><a href="reference.html#RNS.Reticulum.ANNOUNCE_CAP">ANNOUNCE_CAP (RNS.Reticulum attribute)</a>
</li>
<li><a href="reference.html#RNS.Destination.app_and_aspects_from_name">app_and_aspects_from_name() (RNS.Destination static method)</a>
+</li>
+ <li><a href="reference.html#RNS.Transport.await_path">await_path() (RNS.Transport static method)</a>
</li>
</ul></td>
</tr></table>
@@ -301,6 +303,10 @@
<section id="B" class="genindex-section">
<h2>B</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
+ <td style="width: 33%; vertical-align: top;"><ul>
+ <li><a href="reference.html#RNS.Reticulum.blackhole_sources">blackhole_sources() (RNS.Reticulum static method)</a>
+</li>
+ </ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="reference.html#RNS.Buffer">Buffer (class in RNS)</a>
</li>
@@ -517,10 +523,12 @@
<li><a href="reference.html#RNS.Link.identify">identify() (RNS.Link method)</a>
</li>
<li><a href="reference.html#RNS.Identity">Identity (class in RNS)</a>
+</li>
+ <li><a href="reference.html#RNS.Link.inactive_for">inactive_for() (RNS.Link method)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
- <li><a href="reference.html#RNS.Link.inactive_for">inactive_for() (RNS.Link method)</a>
+ <li><a href="reference.html#RNS.Reticulum.interface_discovery_sources">interface_discovery_sources() (RNS.Reticulum static method)</a>
</li>
<li><a href="reference.html#RNS.Resource.is_compressed">is_compressed() (RNS.Resource method)</a>
</li>
@@ -618,13 +626,15 @@
</li>
<li><a href="reference.html#RNS.Packet">Packet (class in RNS)</a>
</li>
- </ul></td>
- <td style="width: 33%; vertical-align: top;"><ul>
<li><a href="reference.html#RNS.PacketReceipt">PacketReceipt (class in RNS)</a>
</li>
+ </ul></td>
+ <td style="width: 33%; vertical-align: top;"><ul>
<li><a href="reference.html#RNS.Transport.PATHFINDER_M">PATHFINDER_M (RNS.Transport attribute)</a>
</li>
<li><a href="reference.html#RNS.Packet.PLAIN_MDU">PLAIN_MDU (RNS.Packet attribute)</a>
+</li>
+ <li><a href="reference.html#RNS.Reticulum.publish_blackhole_enabled">publish_blackhole_enabled() (RNS.Reticulum static method)</a>
</li>
</ul></td>
</tr></table>
@@ -669,6 +679,8 @@
<li><a href="reference.html#RNS.Transport.request_path">request_path() (RNS.Transport static method)</a>
</li>
<li><a href="reference.html#RNS.RequestReceipt">RequestReceipt (class in RNS)</a>
+</li>
+ <li><a href="reference.html#RNS.Reticulum.required_discovery_value">required_discovery_value() (RNS.Reticulum static method)</a>
</li>
<li><a href="reference.html#RNS.Packet.resend">resend() (RNS.Packet method)</a>
</li>
@@ -819,7 +831,7 @@
</aside>
</div>
-</div><script src="_static/documentation_options.js?v=d55fa986"></script>
+</div><script src="_static/documentation_options.js?v=fc837d61"></script>
<script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
diff --git a/docs/manual/gettingstartedfast.html b/docs/manual/gettingstartedfast.html
index 44e2952..0014dcf 100644
--- a/docs/manual/gettingstartedfast.html
+++ b/docs/manual/gettingstartedfast.html
@@ -7,7 +7,7 @@
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
- <title>Getting Started Fast - Reticulum Network Stack 1.0.5 documentation</title>
+ <title>Getting Started Fast - Reticulum Network Stack 1.1.0 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
@@ -180,7 +180,7 @@
</label>
</div>
<div class="header-center">
- <a href="index.html"><div class="brand">Reticulum Network Stack 1.0.5 documentation</div></a>
+ <a href="index.html"><div class="brand">Reticulum Network Stack 1.1.0 documentation</div></a>
</div>
<div class="header-right">
<div class="theme-toggle-container theme-toggle-header">
@@ -204,7 +204,7 @@
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
</div>
- <span class="sidebar-brand-text">Reticulum Network Stack 1.0.5 documentation</span>
+ <span class="sidebar-brand-text">Reticulum Network Stack 1.1.0 documentation</span>
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
@@ -451,34 +451,79 @@ deep-packet-inspection much more difficult.</p>
instance, while preserving anonymity. If you care more about performance, and a slightly
easier setup, use TCP.</p>
</section>
+<section id="bootstrapping-connectivity">
+<span id="id4"></span><h2>Bootstrapping Connectivity<a class="headerlink" href="#bootstrapping-connectivity" title="Link to this heading">¶</a></h2>
+<p>Reticulum is not a service you subscribe to, nor is it a single global network you “join”. It is a <em>networking stack</em>; a toolkit for building communications systems that align with your specific values, requirements, and operational environment. The way you choose to connect to other Reticulum peers is entirely your own choice.</p>
+<p>One of the most powerful aspects of Reticulum is that it provides a multitude of tools to establish, maintain, and optimize connectivity. You can use these tools in isolation or combine them in complex configurations to achieve a vast array of goals.</p>
+<p>Whether your aim is to create a completely private, air-gapped network for your family; to build a resilient community mesh that survives infrastructure collapse; to connect far and wide to as many nodes as possible; or simply to maintain a reliable, encrypted link to a specific organization you care about, Reticulum provides the mechanisms to make it happen.</p>
+<p>There is no “right” or “wrong” way to build a Reticulum network, and you don’t need to be a network engineer just to get started. If the information flows in the way you intend, and your privacy and security requirements are met, your configuration is a success. Reticulum is designed to make the most challenging and difficult scenarios attainable, even when other networking technologies fail.</p>
+<section id="finding-your-way">
+<h3>Finding Your Way<a class="headerlink" href="#finding-your-way" title="Link to this heading">¶</a></h3>
+<p>When you first start using Reticulum, you need a way to obtain connectivity with the peers you want to communicate with. This is the process of <strong>bootstrapping</strong>.</p>
+<p>A common mistake in modern networking is the reliance on a few centralized, hard-coded entrypoints. If every user simply connects to the same list of public IP addresses found on a website, the network becomes brittle, centralized, and ultimately fails to deliver on the promise of decentralization.</p>
+<p>Reticulum encourages the approach of <em>organic growth</em>. Instead of relying on permanent static connections to distant servers, you can use temporary bootstrap connections to <em>discover</em> better, more relevant or local infrastructure. Once discovered, your system can automatically form stronger, more direct links to these peers, and discard the temporary bootstrap links. This results in a web of connections that are geographically relevant, resilient and efficient.</p>
+<p>It <em>is</em> possible to simply add a few public entrypoints to the <code class="docutils literal notranslate"><span class="pre">[interfaces]</span></code> section of your Reticulum configuration and be connected, but a better option is to enable <a class="reference internal" href="using.html#using-interface-discovery"><span class="std std-ref">interface discovery</span></a> and either manually select relevant, local interfaces, or enable discovered interface auto-connection.</p>
+<p>A relevant option in this context is the <a class="reference internal" href="interfaces.html#interfaces-options"><span class="std std-ref">bootstrap only</span></a> interface option. This is an automated tool for better distributing connectivity. By enabling interface discovery and auto-connection, and marking an interface as <code class="docutils literal notranslate"><span class="pre">bootstrap_only</span></code>, you tell Reticulum to use that interface primarliy to find connectivity options, and then disconnect it once sufficient entrypoints have been discovered. This helps create a network topology that favors locality and resilience over the simple centralization caused by using only a few static entrypoints.</p>
+<p>A good place to find interface definitions for bootstrapping connectivity is <a class="reference external" href="https://rmap.world/">rmap.world</a>.</p>
+</section>
+<section id="building-personal-infrastructure">
+<h3>Building Personal Infrastructure<a class="headerlink" href="#building-personal-infrastructure" title="Link to this heading">¶</a></h3>
+<p>You do not need a datacenter to be a meaningful part of the Reticulum ecosystem. In fact, the most important nodes in the network are often the smallest ones.</p>
+<p>We strongly encourage everyone, even home users, to think in terms of building <strong>personal infrastructure</strong>. Don’t connect every phone, tablet, and computer in your house directly to a public internet gateway. Instead, repurpose an old computer, a Raspberry Pi, or a supported router to act as your own, personal <strong>Transport Node</strong>:</p>
+<ul class="simple">
+<li><p>Your local Transport Node sits in your home, connected to your WiFi and perhaps a radio interface (like an RNode).</p></li>
+<li><p>You configure this node with a <code class="docutils literal notranslate"><span class="pre">bootstrap_only</span></code> interface (perhaps a TCP tunnel to a wider network) and enable interface discovery.</p></li>
+<li><p>While you sleep, work, or cook, your node listens to the network. It discovers other local community members, validates their Network Identities, and automatically establishes direct links.</p></li>
+<li><p>Your personal devices now connect to your <em>local</em> node, which is integrated into a living, breathing local mesh. Your traffic flows through local paths provided by other real people in the community rather than bouncing off a distant server.</p></li>
+</ul>
+<p><strong>Don’t wait for others to build the networks you want to see</strong>. Every network is important, perhaps even most so those that support individual families and persons. Once enough of this personal, local infrastructure exist, connecting them directly to each other, without traversing the public Internet, becomes inevitable.</p>
+</section>
+<section id="mixing-strategies">
+<h3>Mixing Strategies<a class="headerlink" href="#mixing-strategies" title="Link to this heading">¶</a></h3>
+<p>There is no requirement to commit to a single strategy. The most robust setups often mix static, dynamic, and discovered interfaces.</p>
+<ul class="simple">
+<li><p><strong>Static Interfaces:</strong> You maintain a permanent interface to a trusted friend or organization using a static configuration.</p></li>
+<li><p><strong>Bootstrap Links:</strong> You connect a <code class="docutils literal notranslate"><span class="pre">bootstrap_only</span></code> interface to a public gateway on the Internet to scan for new connectable peers or to regain connectivity if your other interfaces fail.</p></li>
+<li><p><strong>Local Wide-Area Connectivity:</strong> You run a <code class="docutils literal notranslate"><span class="pre">RNodeInterface</span></code> on a shared frequency, giving you completely self-sovereign and private wide-area access to both your own network and other Reticulum peers globally, without any “service providers” being able to control or monitor how you interact with people.</p></li>
+</ul>
+<p>By combining these methods, you create a system that is secure against single points of failure, adaptable to changing network conditions, and better integrated into your physical and social reality.</p>
+</section>
+<section id="network-health-responsibility">
+<h3>Network Health & Responsibility<a class="headerlink" href="#network-health-responsibility" title="Link to this heading">¶</a></h3>
+<p>As you participate in the wider networks you discover and build, you will inevitably encounter peers that are misconfigured, malicious, or simply broken. To protect your resources and those of your local peers, you can utilize the <a class="reference internal" href="using.html#using-blackhole-management"><span class="std std-ref">Blackhole Management</span></a> system.</p>
+<p>Whether you manually block a spamming identity or subscribe to a blackhole list maintained by a trusted Network Identity, these tools help ensure that <em>your</em> transport capacity is used for what <em>you</em> consider legitimate communication. This keeps your local segment efficient and contributes to the health of the wider network.</p>
+</section>
+<section id="contributing-to-the-global-ret">
+<h3>Contributing to the Global Ret<a class="headerlink" href="#contributing-to-the-global-ret" title="Link to this heading">¶</a></h3>
+<p>If you have the means to host a stable node with a public IP address, consider becoming a <a class="reference internal" href="#hosting-entrypoints"><span class="std std-ref">Public Entrypoint</span></a>. By <a class="reference internal" href="interfaces.html#interfaces-discoverable"><span class="std std-ref">publishing your interface as discoverable</span></a>, you provide a potential connection point for others, helping the network grow and reach new areas.</p>
+<p>For guidelines on how to properly configure and secure a public gateway, refer to the <a class="reference internal" href="#hosting-entrypoints"><span class="std std-ref">Hosting Public Entrypoints</span></a> section.</p>
+</section>
+</section>
<section id="connect-to-the-public-testnet">
<h2>Connect to the Public Testnet<a class="headerlink" href="#connect-to-the-public-testnet" title="Link to this heading">¶</a></h2>
<p>An experimental public testnet has been made accessible by volunteers in the community. You
can find interface definitions for adding to your <code class="docutils literal notranslate"><span class="pre">.reticulum/config</span></code> file on the
-<a class="reference external" href="https://reticulum.network/connect.html">Reticulum Website</a> or the
-<a class="reference external" href="https://github.com/markqvist/Reticulum/wiki/Community-Node-List">Community Wiki</a></p>
+<a class="reference external" href="https://reticulum.network/connect.html">Reticulum Website</a>, or the
+<a class="reference external" href="https://github.com/markqvist/Reticulum/wiki/Community-Node-List">Community Wiki</a>.</p>
+<p>As development of Reticulum has transitioned away from the public Internet, and is now happening exclusively over Reticulum itself, the lists on the <a class="reference external" href="https://reticulum.network/connect.html">Reticulum Website</a> and the
+<a class="reference external" href="https://github.com/markqvist/Reticulum/wiki/Community-Node-List">Community Wiki</a> are no longer actively maintained, and any up-to-date connectivity information will have to be found elsewhere.</p>
+<p>For a while, these resources will likely still be a usable way to find bootstrap connections, that will allow you to discover other entrypoints to connect to, but it is highly recommended to also check community run projects like <a class="reference external" href="https://rmap.world/">rmap.world</a>.</p>
<p>You can connect your devices or instances to one or more of these to gain access to any
Reticulum networks they are physically connected to. Simply add one or more interface
snippets to your config file in the <code class="docutils literal notranslate"><span class="pre">[interface]</span></code> section, like in the example below:</p>
-<div class="highlight-ini notranslate"><div class="highlight"><pre><span></span><span class="c1"># TCP/IP interface to the BetweenTheBorders Hub (community-provided)</span>
-<span class="k">[[RNS Testnet BetweenTheBorders]]</span>
+<div class="highlight-ini notranslate"><div class="highlight"><pre><span></span><span class="c1"># TCP/IP interface to the RNS Amsterdam Hub</span>
+<span class="k">[[RNS Testnet Amsterdam]]</span>
<span class="w"> </span><span class="na">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">TCPClientInterface</span>
<span class="w"> </span><span class="na">enabled</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">yes</span>
-<span class="w"> </span><span class="na">target_host</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">reticulum.betweentheborders.com</span>
-<span class="w"> </span><span class="na">target_port</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">4242</span>
+<span class="w"> </span><span class="na">target_host</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">amsterdam.connect.reticulum.network</span>
+<span class="w"> </span><span class="na">target_port</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">4965</span>
</pre></div>
</div>
<div class="admonition tip">
<p class="admonition-title">Tip</p>
-<p>Ideally, set up a Reticulum Transport Node that your own devices can reach locally, and then
-connect that transport node to a couple of public entrypoints. This will provide efficient
-connections and redundancy in case any of them go down.</p>
+<p>Don’t rely on a single connection to a testnet entrypoint for everyday use. The testnet is often used for development and failure testing scenarios. Instead, read the <a class="reference internal" href="#bootstrapping-connectivity"><span class="std std-ref">Bootstrapping Connectivity</span></a> section.</p>
</div>
-<p>Many other Reticulum instances are connecting to this testnet, and you can also join it
-via other entry points if you know them. There is absolutely no control over the network
-topography, usage or what types of instances connect. It will also occasionally be used
-to test various failure scenarios, and there are no availability or service guarantees.
-Expect weird things to happen on this network, as people experiment and try out things.</p>
+<p>As the amount of global Reticulum nodes and entrypoints have grown to a substantial quantity, the public Amsterdam Testnet entrypoint is slated for de-commisioning in the first quarter of 2026. If your own instances rely on this entrypoint for connectivity, it is high time to start configuring alternatives. Read the <a class="reference internal" href="#bootstrapping-connectivity"><span class="std std-ref">Bootstrapping Connectivity</span></a> section for pointers.</p>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>It probably goes without saying, but <em>don’t use the testnet entry-points as
@@ -489,9 +534,10 @@ leave it up to the user which networks to connect to, and how.</p>
</div>
</section>
<section id="hosting-public-entrypoints">
-<h2>Hosting Public Entrypoints<a class="headerlink" href="#hosting-public-entrypoints" title="Link to this heading">¶</a></h2>
+<span id="hosting-entrypoints"></span><h2>Hosting Public Entrypoints<a class="headerlink" href="#hosting-public-entrypoints" title="Link to this heading">¶</a></h2>
<p>If you want to host a public (or private) entry-point to a Reticulum network over the
-Internet, this section offers some helpful pointers. You will need a machine, physical or
+Internet, this section offers some helpful pointers. Once you have set up your public entrypoint, it is a great idea to <a class="reference internal" href="interfaces.html#interfaces-discoverable"><span class="std std-ref">make it discoverable over Reticulum</span></a>.</p>
+<p>You will need a machine, physical or
virtual with a public IP address, that can be reached by other devices on the Internet.</p>
<p>The most efficient and performant way to host a connectable entry-point supporting many
users is to use the <code class="docutils literal notranslate"><span class="pre">BackboneInterface</span></code>. This interface type is fully compatible with
@@ -579,50 +625,8 @@ started is to install the latest release of Reticulum via pip:</p>
ready to import and use RNS in your own programs. The next step will most
likely be to look at some <a class="reference internal" href="examples.html#examples-main"><span class="std std-ref">Example Programs</span></a>.</p>
<p>The entire Reticulum API is documented in the <a class="reference internal" href="reference.html#api-main"><span class="std std-ref">API Reference</span></a>
-chapter of this manual.</p>
-</section>
-<section id="participate-in-reticulum-development">
-<h2>Participate in Reticulum Development<a class="headerlink" href="#participate-in-reticulum-development" title="Link to this heading">¶</a></h2>
-<p>If you want to participate in the development of Reticulum and associated
-utilities, you’ll want to get the latest source from GitHub. In that case,
-don’t use pip, but try this recipe:</p>
-<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span><span class="c1"># Install dependencies</span>
-pip<span class="w"> </span>install<span class="w"> </span>cryptography<span class="w"> </span>pyserial
-
-<span class="c1"># Clone repository</span>
-git<span class="w"> </span>clone<span class="w"> </span>https://github.com/markqvist/Reticulum.git
-
-<span class="c1"># Move into Reticulum folder and symlink library to examples folder</span>
-<span class="nb">cd</span><span class="w"> </span>Reticulum
-ln<span class="w"> </span>-s<span class="w"> </span>../RNS<span class="w"> </span>./Examples/
-
-<span class="c1"># Run an example</span>
-python<span class="w"> </span>Examples/Echo.py<span class="w"> </span>-s
-
-<span class="c1"># Unless you've manually created a config file, Reticulum will do so now,</span>
-<span class="c1"># and immediately exit. Make any necessary changes to the file:</span>
-nano<span class="w"> </span>~/.reticulum/config
-
-<span class="c1"># ... and launch the example again.</span>
-python<span class="w"> </span>Examples/Echo.py<span class="w"> </span>-s
-
-<span class="c1"># You can now repeat the process on another computer,</span>
-<span class="c1"># and run the same example with -h to get command line options.</span>
-python<span class="w"> </span>Examples/Echo.py<span class="w"> </span>-h
-
-<span class="c1"># Run the example in client mode to "ping" the server.</span>
-<span class="c1"># Replace the hash below with the actual destination hash of your server.</span>
-python<span class="w"> </span>Examples/Echo.py<span class="w"> </span>174a64852a75682259ad8b921b8bf416
-
-<span class="c1"># Have a look at another example</span>
-python<span class="w"> </span>Examples/Filetransfer.py<span class="w"> </span>-h
-</pre></div>
-</div>
-<p>When you have experimented with the basic examples, it’s time to go read the
-<a class="reference internal" href="understanding.html#understanding-main"><span class="std std-ref">Understanding Reticulum</span></a> chapter. Before submitting
-your first pull request, it is probably a good idea to introduce yourself on
-the <a class="reference external" href="https://github.com/markqvist/Reticulum/discussions">disucssion forum on GitHub</a>,
-or ask one of the developers or maintainers for a good place to start.</p>
+chapter of this manual. Before diving in, it’s probably a good idea to read
+this manual in full, but at least start with the <a class="reference internal" href="understanding.html#understanding-main"><span class="std std-ref">Understanding Reticulum</span></a> chapter.</p>
</section>
<section id="platform-specific-install-notes">
<span id="install-guides"></span><h2>Platform-Specific Install Notes<a class="headerlink" href="#platform-specific-install-notes" title="Link to this heading">¶</a></h2>
@@ -1010,12 +1014,19 @@ All other available modules will still be loaded when needed.</p>
<li><a class="reference internal" href="#using-the-included-utilities">Using the Included Utilities</a></li>
<li><a class="reference internal" href="#creating-a-network-with-reticulum">Creating a Network With Reticulum</a></li>
<li><a class="reference internal" href="#connecting-reticulum-instances-over-the-internet">Connecting Reticulum Instances Over the Internet</a></li>
+<li><a class="reference internal" href="#bootstrapping-connectivity">Bootstrapping Connectivity</a><ul>
+<li><a class="reference internal" href="#finding-your-way">Finding Your Way</a></li>
+<li><a class="reference internal" href="#building-personal-infrastructure">Building Personal Infrastructure</a></li>
+<li><a class="reference internal" href="#mixing-strategies">Mixing Strategies</a></li>
+<li><a class="reference internal" href="#network-health-responsibility">Network Health & Responsibility</a></li>
+<li><a class="reference internal" href="#contributing-to-the-global-ret">Contributing to the Global Ret</a></li>
+</ul>
+</li>
<li><a class="reference internal" href="#connect-to-the-public-testnet">Connect to the Public Testnet</a></li>
<li><a class="reference internal" href="#hosting-public-entrypoints">Hosting Public Entrypoints</a></li>
<li><a class="reference internal" href="#adding-radio-interfaces">Adding Radio Interfaces</a></li>
<li><a class="reference internal" href="#creating-and-using-custom-interfaces">Creating and Using Custom Interfaces</a></li>
<li><a class="reference internal" href="#develop-a-program-with-reticulum">Develop a Program with Reticulum</a></li>
-<li><a class="reference internal" href="#participate-in-reticulum-development">Participate in Reticulum Development</a></li>
<li><a class="reference internal" href="#platform-specific-install-notes">Platform-Specific Install Notes</a><ul>
<li><a class="reference internal" href="#android">Android</a></li>
<li><a class="reference internal" href="#arm64">ARM64</a></li>
@@ -1040,7 +1051,7 @@ All other available modules will still be loaded when needed.</p>
</aside>
</div>
-</div><script src="_static/documentation_options.js?v=d55fa986"></script>
+</div><script src="_static/documentation_options.js?v=fc837d61"></script>
<script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
diff --git a/docs/manual/hardware.html b/docs/manual/hardware.html
index 6b826a4..536291a 100644
--- a/docs/manual/hardware.html
+++ b/docs/manual/hardware.html
@@ -7,7 +7,7 @@
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
- <title>Communications Hardware - Reticulum Network Stack 1.0.5 documentation</title>
+ <title>Communications Hardware - Reticulum Network Stack 1.1.0 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
@@ -180,7 +180,7 @@
</label>
</div>
<div class="header-center">
- <a href="index.html"><div class="brand">Reticulum Network Stack 1.0.5 documentation</div></a>
+ <a href="index.html"><div class="brand">Reticulum Network Stack 1.1.0 documentation</div></a>
</div>
<div class="header-right">
<div class="theme-toggle-container theme-toggle-header">
@@ -204,7 +204,7 @@
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
</div>
- <span class="sidebar-brand-text">Reticulum Network Stack 1.0.5 documentation</span>
+ <span class="sidebar-brand-text">Reticulum Network Stack 1.1.0 documentation</span>
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
@@ -671,7 +671,7 @@ can be used with Reticulum. This includes virtual software modems such as
</aside>
</div>
-</div><script src="_static/documentation_options.js?v=d55fa986"></script>
+</div><script src="_static/documentation_options.js?v=fc837d61"></script>
<script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
diff --git a/docs/manual/index.html b/docs/manual/index.html
index ad20196..15192b4 100644
--- a/docs/manual/index.html
+++ b/docs/manual/index.html
@@ -7,7 +7,7 @@
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
- <title>Reticulum Network Stack 1.0.5 documentation</title>
+ <title>Reticulum Network Stack 1.1.0 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
@@ -180,7 +180,7 @@
</label>
</div>
<div class="header-center">
- <a href="#"><div class="brand">Reticulum Network Stack 1.0.5 documentation</div></a>
+ <a href="#"><div class="brand">Reticulum Network Stack 1.1.0 documentation</div></a>
</div>
<div class="header-right">
<div class="theme-toggle-container theme-toggle-header">
@@ -204,7 +204,7 @@
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
</div>
- <span class="sidebar-brand-text">Reticulum Network Stack 1.0.5 documentation</span>
+ <span class="sidebar-brand-text">Reticulum Network Stack 1.1.0 documentation</span>
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
@@ -291,12 +291,19 @@ to participate in the development of Reticulum itself.</p>
<li class="toctree-l2"><a class="reference internal" href="gettingstartedfast.html#using-the-included-utilities">Using the Included Utilities</a></li>
<li class="toctree-l2"><a class="reference internal" href="gettingstartedfast.html#creating-a-network-with-reticulum">Creating a Network With Reticulum</a></li>
<li class="toctree-l2"><a class="reference internal" href="gettingstartedfast.html#connecting-reticulum-instances-over-the-internet">Connecting Reticulum Instances Over the Internet</a></li>
+<li class="toctree-l2"><a class="reference internal" href="gettingstartedfast.html#bootstrapping-connectivity">Bootstrapping Connectivity</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="gettingstartedfast.html#finding-your-way">Finding Your Way</a></li>
+<li class="toctree-l3"><a class="reference internal" href="gettingstartedfast.html#building-personal-infrastructure">Building Personal Infrastructure</a></li>
+<li class="toctree-l3"><a class="reference internal" href="gettingstartedfast.html#mixing-strategies">Mixing Strategies</a></li>
+<li class="toctree-l3"><a class="reference internal" href="gettingstartedfast.html#network-health-responsibility">Network Health & Responsibility</a></li>
+<li class="toctree-l3"><a class="reference internal" href="gettingstartedfast.html#contributing-to-the-global-ret">Contributing to the Global Ret</a></li>
+</ul>
+</li>
<li class="toctree-l2"><a class="reference internal" href="gettingstartedfast.html#connect-to-the-public-testnet">Connect to the Public Testnet</a></li>
<li class="toctree-l2"><a class="reference internal" href="gettingstartedfast.html#hosting-public-entrypoints">Hosting Public Entrypoints</a></li>
<li class="toctree-l2"><a class="reference internal" href="gettingstartedfast.html#adding-radio-interfaces">Adding Radio Interfaces</a></li>
<li class="toctree-l2"><a class="reference internal" href="gettingstartedfast.html#creating-and-using-custom-interfaces">Creating and Using Custom Interfaces</a></li>
<li class="toctree-l2"><a class="reference internal" href="gettingstartedfast.html#develop-a-program-with-reticulum">Develop a Program with Reticulum</a></li>
-<li class="toctree-l2"><a class="reference internal" href="gettingstartedfast.html#participate-in-reticulum-development">Participate in Reticulum Development</a></li>
<li class="toctree-l2"><a class="reference internal" href="gettingstartedfast.html#platform-specific-install-notes">Platform-Specific Install Notes</a><ul>
<li class="toctree-l3"><a class="reference internal" href="gettingstartedfast.html#android">Android</a></li>
<li class="toctree-l3"><a class="reference internal" href="gettingstartedfast.html#arm64">ARM64</a></li>
@@ -325,7 +332,14 @@ to participate in the development of Reticulum itself.</p>
<li class="toctree-l3"><a class="reference internal" href="using.html#the-rnodeconf-utility">The rnodeconf Utility</a></li>
</ul>
</li>
+<li class="toctree-l2"><a class="reference internal" href="using.html#discovering-interfaces">Discovering Interfaces</a></li>
<li class="toctree-l2"><a class="reference internal" href="using.html#remote-management">Remote Management</a></li>
+<li class="toctree-l2"><a class="reference internal" href="using.html#blackhole-management">Blackhole Management</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="using.html#local-blackhole-management">Local Blackhole Management</a></li>
+<li class="toctree-l3"><a class="reference internal" href="using.html#automated-list-sourcing">Automated List Sourcing</a></li>
+<li class="toctree-l3"><a class="reference internal" href="using.html#publishing-blackhole-lists">Publishing Blackhole Lists</a></li>
+</ul>
+</li>
<li class="toctree-l2"><a class="reference internal" href="using.html#improving-system-configuration">Improving System Configuration</a><ul>
<li class="toctree-l3"><a class="reference internal" href="using.html#fixed-serial-port-names">Fixed Serial Port Names</a></li>
<li class="toctree-l3"><a class="reference internal" href="using.html#reticulum-as-a-system-service">Reticulum as a System Service</a></li>
@@ -350,6 +364,13 @@ to participate in the development of Reticulum itself.</p>
<li class="toctree-l3"><a class="reference internal" href="understanding.html#resources">Resources</a></li>
</ul>
</li>
+<li class="toctree-l2"><a class="reference internal" href="understanding.html#network-identities">Network Identities</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="understanding.html#conceptual-overview">Conceptual Overview</a></li>
+<li class="toctree-l3"><a class="reference internal" href="understanding.html#current-usage">Current Usage</a></li>
+<li class="toctree-l3"><a class="reference internal" href="understanding.html#future-implications">Future Implications</a></li>
+<li class="toctree-l3"><a class="reference internal" href="understanding.html#creating-and-using-a-network-identity">Creating and Using a Network Identity</a></li>
+</ul>
+</li>
<li class="toctree-l2"><a class="reference internal" href="understanding.html#reference-setup">Reference Setup</a></li>
<li class="toctree-l2"><a class="reference internal" href="understanding.html#protocol-specifics">Protocol Specifics</a><ul>
<li class="toctree-l3"><a class="reference internal" href="understanding.html#packet-prioritisation">Packet Prioritisation</a></li>
@@ -394,18 +415,27 @@ to participate in the development of Reticulum itself.</p>
<li class="toctree-l2"><a class="reference internal" href="interfaces.html#pipe-interface">Pipe Interface</a></li>
<li class="toctree-l2"><a class="reference internal" href="interfaces.html#kiss-interface">KISS Interface</a></li>
<li class="toctree-l2"><a class="reference internal" href="interfaces.html#ax-25-kiss-interface">AX.25 KISS Interface</a></li>
+<li class="toctree-l2"><a class="reference internal" href="interfaces.html#discoverable-interfaces">Discoverable Interfaces</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="interfaces.html#enabling-discovery">Enabling Discovery</a></li>
+<li class="toctree-l3"><a class="reference internal" href="interfaces.html#discovery-parameters">Discovery Parameters</a></li>
+<li class="toctree-l3"><a class="reference internal" href="interfaces.html#interface-modes">Interface Modes</a></li>
+<li class="toctree-l3"><a class="reference internal" href="interfaces.html#security-considerations">Security Considerations</a></li>
+<li class="toctree-l3"><a class="reference internal" href="interfaces.html#example-configuration">Example Configuration</a></li>
+</ul>
+</li>
<li class="toctree-l2"><a class="reference internal" href="interfaces.html#common-interface-options">Common Interface Options</a></li>
-<li class="toctree-l2"><a class="reference internal" href="interfaces.html#interface-modes">Interface Modes</a></li>
+<li class="toctree-l2"><a class="reference internal" href="interfaces.html#interfaces-modes">Interface Modes</a></li>
<li class="toctree-l2"><a class="reference internal" href="interfaces.html#announce-rate-control">Announce Rate Control</a></li>
<li class="toctree-l2"><a class="reference internal" href="interfaces.html#new-destination-rate-limiting">New Destination Rate Limiting</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="networks.html">Building Networks</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="networks.html#concepts-overview">Concepts & Overview</a></li>
-<li class="toctree-l2"><a class="reference internal" href="networks.html#example-scenarios">Example Scenarios</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="networks.html#interconnected-lora-sites">Interconnected LoRa Sites</a></li>
-<li class="toctree-l3"><a class="reference internal" href="networks.html#bridging-over-the-internet">Bridging Over the Internet</a></li>
-<li class="toctree-l3"><a class="reference internal" href="networks.html#growth-and-convergence">Growth and Convergence</a></li>
+<li class="toctree-l2"><a class="reference internal" href="networks.html#concepts-overview">Concepts & Overview</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="networks.html#introductory-considerations">Introductory Considerations</a></li>
+<li class="toctree-l3"><a class="reference internal" href="networks.html#destinations-not-addresses">Destinations, Not Addresses</a></li>
+<li class="toctree-l3"><a class="reference internal" href="networks.html#transport-nodes-and-instances">Transport Nodes and Instances</a></li>
+<li class="toctree-l3"><a class="reference internal" href="networks.html#trustless-networking">Trustless Networking</a></li>
+<li class="toctree-l3"><a class="reference internal" href="networks.html#heterogeneous-connectivity">Heterogeneous Connectivity</a></li>
</ul>
</li>
</ul>
@@ -520,7 +550,7 @@ to participate in the development of Reticulum itself.</p>
</aside>
</div>
-</div><script src="_static/documentation_options.js?v=d55fa986"></script>
+</div><script src="_static/documentation_options.js?v=fc837d61"></script>
<script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
diff --git a/docs/manual/interfaces.html b/docs/manual/interfaces.html
index be3b57f..e608226 100644
--- a/docs/manual/interfaces.html
+++ b/docs/manual/interfaces.html
@@ -7,7 +7,7 @@
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
- <title>Configuring Interfaces - Reticulum Network Stack 1.0.5 documentation</title>
+ <title>Configuring Interfaces - Reticulum Network Stack 1.1.0 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
@@ -180,7 +180,7 @@
</label>
</div>
<div class="header-center">
- <a href="index.html"><div class="brand">Reticulum Network Stack 1.0.5 documentation</div></a>
+ <a href="index.html"><div class="brand">Reticulum Network Stack 1.1.0 documentation</div></a>
</div>
<div class="header-right">
<div class="theme-toggle-container theme-toggle-header">
@@ -204,7 +204,7 @@
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
</div>
- <span class="sidebar-brand-text">Reticulum Network Stack 1.0.5 documentation</span>
+ <span class="sidebar-brand-text">Reticulum Network Stack 1.1.0 documentation</span>
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
@@ -1076,6 +1076,183 @@ relevant regulation for your location, and to make decisions accordingly.</p>
</pre></div>
</div>
</section>
+<section id="discoverable-interfaces">
+<span id="interfaces-discoverable"></span><h2>Discoverable Interfaces<a class="headerlink" href="#discoverable-interfaces" title="Link to this heading">¶</a></h2>
+<p>Reticulum includes a powerful system for publishing your local interfaces to the wider network, allowing other peers to <a class="reference internal" href="using.html#using-interface-discovery"><span class="std std-ref">discover, validate, and automatically connect to them</span></a>. This feature is particularly useful for creating decentralized networks where peers can dynamically find entrypoints, such as public Internet gateways or local radio access points, without relying on static configuration files or centralized directories.</p>
+<p>When an interface is made <strong>discoverable</strong>, your Reticulum instance will periodically broadcast an announce packet containing the connection details and parameters required for other peers to establish a connection. These announces are propagated over the network using the standard Reticulum announce mechanism using the <code class="docutils literal notranslate"><span class="pre">rnstransport.discovery.interface</span></code> destination type.</p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>To use the interface discovery functionality, the <code class="docutils literal notranslate"><span class="pre">LXMF</span></code> module must be installed in your Python environment. You can install it using pip:</p>
+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>pip<span class="w"> </span>install<span class="w"> </span>lxmf
+</pre></div>
+</div>
+</div>
+<section id="enabling-discovery">
+<h3>Enabling Discovery<a class="headerlink" href="#enabling-discovery" title="Link to this heading">¶</a></h3>
+<p>Interface discovery is enabled on a per-interface basis. To make a specific interface discoverable, you must add the <code class="docutils literal notranslate"><span class="pre">discoverable</span></code> option to that interface’s configuration block and set it to <code class="docutils literal notranslate"><span class="pre">yes</span></code>.</p>
+<div class="highlight-ini notranslate"><div class="highlight"><pre><span></span><span class="k">[[My Public Gateway]]</span>
+<span class="w"> </span><span class="na">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">BackboneInterface</span>
+<span class="w"> </span><span class="na">...</span>
+<span class="w"> </span><span class="na">discoverable</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">yes</span>
+</pre></div>
+</div>
+<p>Once enabled, Reticulum will automatically handle the generation, signing, stamping, and broadcasting of the discovery announces. It is not <em>required</em> to enable Transport to publish interface discovery information, but for most use cases where you want others to connect to you, you will likely want <code class="docutils literal notranslate"><span class="pre">enable_transport</span></code> set to <code class="docutils literal notranslate"><span class="pre">yes</span></code> in the <code class="docutils literal notranslate"><span class="pre">[reticulum]</span></code> section of your configuration.</p>
+</section>
+<section id="discovery-parameters">
+<h3>Discovery Parameters<a class="headerlink" href="#discovery-parameters" title="Link to this heading">¶</a></h3>
+<p>When <code class="docutils literal notranslate"><span class="pre">discoverable</span></code> is enabled, a variety of additional options become available to control how the interface is presented to the network. These parameters allow you to fine-tune the metadata, security requirements, and visibility of your interface.</p>
+<p><strong>Basic Metadata</strong></p>
+<dl class="simple">
+<dt><code class="docutils literal notranslate"><span class="pre">discovery_name</span></code></dt><dd><p>A human-readable name for the interface. This name will be displayed to users on remote systems when they list discovered interfaces. If not specified, the interface name (the section header) will be used.</p>
+</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">announce_interval</span></code></dt><dd><p>The interval in minutes between successive discovery announces for this interface. Default is 360 minutes (6 hours). For stable, long-running infrastructure, higher intervals (12 to 22 hours) are usually sufficient and reduce network load. Minimum allowed value is 5 minutes (but expect to have your announces throttled if using intervals below one hour).</p>
+</dd>
+</dl>
+<p><strong>Connectivity Specification</strong></p>
+<dl>
+<dt><code class="docutils literal notranslate"><span class="pre">reachable_on</span></code></dt><dd><p>Specifies the address that remote peers should use to connect to this interface.</p>
+<ul class="simple">
+<li><p>For TCP and Backbone interfaces, this is typically the public IP address or hostname. Do not include the port, this is fetched automatically from the interface.</p></li>
+<li><p>For I2P interfaces, this is usually the I2P <code class="docutils literal notranslate"><span class="pre">b32</span></code> address. This value is fetched automatically from the <code class="docutils literal notranslate"><span class="pre">I2PInterface</span></code> once it is up and connected to the I2P network, so you should not set this manually, unless you absolutely know what you’re doing.</p></li>
+</ul>
+<p><strong>Dynamic Resolution:</strong> This option also accepts a path to an external executable script or binary. If a path is provided, Reticulum will execute the script and use its <code class="docutils literal notranslate"><span class="pre">stdout</span></code> as the reachability address. This is useful for devices behind dynamic DNS, NATs, or complex cloud environments where the external IP is not known locally. The script must simply print the address to stdout and exit.</p>
+</dd>
+</dl>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p><strong>Script Execution Requirements:</strong>
+When using an executable script for <code class="docutils literal notranslate"><span class="pre">reachable_on</span></code>, Reticulum expects the script to output only the IP address or hostname to <code class="docutils literal notranslate"><span class="pre">stdout</span></code>, followed by a newline character. Any additional output or errors may cause the resolution to fail. Ensure the script has executable permissions and is robust against temporary network failures.</p>
+</div>
+<p>A minimal example of a script that resolves the externally available, public IP of an internet-connected system could look like this:</p>
+<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="ch">#!/bin/bash</span>
+curl<span class="w"> </span>-s<span class="w"> </span>ip.me
+<span class="nb">exit</span><span class="w"> </span><span class="nv">$?</span>
+</pre></div>
+</div>
+<p>On a real system, you should make the script robust enough to deal with intermittent Internet or service failures, such that the script <em>always</em> returns a sensible value, or if not possible at least exits with a non-zero exit return code, so Reticulum knows the output is invalid.</p>
+<p><strong>Security & Cost</strong></p>
+<dl class="simple">
+<dt><code class="docutils literal notranslate"><span class="pre">discovery_stamp_value</span></code></dt><dd><p>Defines the proof-of-work difficulty for the cryptographic stamp included in the announce. This value acts as a cost barrier to prevent network flooding. The default value is <code class="docutils literal notranslate"><span class="pre">14</span></code>. Increasing this value makes it computationally more expensive to generate an announce, which can be useful to prevent spam on very large networks, but it also increases CPU load on your system when generating announces. Stamps are cached, and only generated if interface information changes, or at instance restart. If you have the computational resources, it is generally advisable to use as high a stamp value as possible.</p>
+</dd>
+</dl>
+<p><strong>Privacy & Encryption</strong></p>
+<dl class="simple">
+<dt><code class="docutils literal notranslate"><span class="pre">discovery_encrypt</span></code></dt><dd><p>If set to <code class="docutils literal notranslate"><span class="pre">yes</span></code>, the discovery announce payload will be encrypted. To decrypt the announce, remote peers must possess the <em>network identity</em> configured for your instance (see <code class="docutils literal notranslate"><span class="pre">network_identity</span></code> in the <code class="docutils literal notranslate"><span class="pre">[reticulum]</span></code> section). This allows you to publish private interfaces that are only discoverable to specific trusted networks.</p>
+</dd>
+</dl>
+<div class="admonition important">
+<p class="admonition-title">Important</p>
+<p>If you enable <code class="docutils literal notranslate"><span class="pre">discovery_encrypt</span></code> but do not configure a valid <code class="docutils literal notranslate"><span class="pre">network_identity</span></code> in the <code class="docutils literal notranslate"><span class="pre">[reticulum]</span></code> section of your configuration, Reticulum will abort the interface discovery announce. Encryption requires a valid network identity key to function.</p>
+</div>
+<dl class="simple">
+<dt><code class="docutils literal notranslate"><span class="pre">publish_ifac</span></code></dt><dd><p>If set to <code class="docutils literal notranslate"><span class="pre">yes</span></code>, the Interface Access Code (IFAC) name and passphrase for this interface will be included in the discovery announce. This allows peers to automatically configure the correct authentication parameters when connecting to the interface.</p>
+</dd>
+</dl>
+<p><strong>Physical Location</strong></p>
+<dl class="simple">
+<dt><code class="docutils literal notranslate"><span class="pre">latitude</span></code>, <code class="docutils literal notranslate"><span class="pre">longitude</span></code>, <code class="docutils literal notranslate"><span class="pre">height</span></code></dt><dd><p>Optional physical coordinates for the interface. These are useful for mapping discovered interfaces geographically or for clients to automatically select the nearest access point. Coordinates should be in decimal degrees, height in meters.</p>
+</dd>
+</dl>
+<p><strong>Radio Parameters</strong></p>
+<p>For physical radio interfaces like <code class="docutils literal notranslate"><span class="pre">RNodeInterface</span></code> or <code class="docutils literal notranslate"><span class="pre">KISSInterface</span></code>, the following optional parameters allow you to broadcast the operating frequency and characteristics, allowing clients to verify compatibility before connecting:</p>
+<dl class="simple">
+<dt><code class="docutils literal notranslate"><span class="pre">discovery_frequency</span></code></dt><dd><p>The operating frequency in Hz. Auto-configured on RNode interfaces. Necessary on KISS-based radio interfaces and <code class="docutils literal notranslate"><span class="pre">TCPClientInterfaces</span></code> connecting to radio modems.</p>
+</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">discovery_bandwidth</span></code></dt><dd><p>The signal bandwidth in Hz. Auto-configured on RNode interfaces. Useful on KISS-based radio interfaces and <code class="docutils literal notranslate"><span class="pre">TCPClientInterfaces</span></code> connecting to radio modems.</p>
+</dd>
+<dt><code class="docutils literal notranslate"><span class="pre">discovery_modulation</span></code></dt><dd><p>The modulation type or scheme. Auto-configured on RNode interfaces, but highly advisable to include on other radio-based interfaces.</p>
+</dd>
+</dl>
+</section>
+<section id="interface-modes">
+<h3>Interface Modes<a class="headerlink" href="#interface-modes" title="Link to this heading">¶</a></h3>
+<p>When you enable discovery on an interface, Reticulum enforces certain interface modes to ensure the interface is actually useful for remote peers.</p>
+<p>If an interface is configured as <code class="docutils literal notranslate"><span class="pre">discoverable</span></code>, but its mode is not explicitly set to <code class="docutils literal notranslate"><span class="pre">gateway</span></code> (for server-style interfaces like <code class="docutils literal notranslate"><span class="pre">BackboneInterface</span></code> or <code class="docutils literal notranslate"><span class="pre">TCPServerInterface</span></code>) or <code class="docutils literal notranslate"><span class="pre">access_point</span></code> (for radio interfaces like <code class="docutils literal notranslate"><span class="pre">RNodeInterface</span></code>), Reticulum will automatically configure the appropriate mode and log a notice.</p>
+<p>For example, if you enable discovery on a <code class="docutils literal notranslate"><span class="pre">RNodeInterface</span></code> without specifying the mode, Reticulum will automatically set it to <code class="docutils literal notranslate"><span class="pre">access_point</span></code> mode.</p>
+</section>
+<section id="security-considerations">
+<h3>Security Considerations<a class="headerlink" href="#security-considerations" title="Link to this heading">¶</a></h3>
+<p>When making interfaces discoverable, you are effectively broadcasting an invitation to connect to your system. It is important to understand the security implications of the configuration options you choose.</p>
+<p><strong>Publishing Credentials</strong></p>
+<p>If you enable <code class="docutils literal notranslate"><span class="pre">publish_ifac</span> <span class="pre">=</span> <span class="pre">yes</span></code>, your interface’s authentication passphrase will be included in the announce. If you are operating a public network and want anyone to connect, this is acceptable. However, if you wish to restrict access to a specific group of users, you <strong>must</strong> enable <code class="docutils literal notranslate"><span class="pre">discovery_encrypt</span> <span class="pre">=</span> <span class="pre">yes</span></code>. This ensures that only peers possessing the correct <code class="docutils literal notranslate"><span class="pre">network_identity</span></code> can decode the passphrase.</p>
+<p><strong>Topology Exposure</strong></p>
+<p>A discoverable interface announces its presence, location (if configured), and capabilities to the network. Even if the connection details are encrypted, the <em>fact</em> that a connectable node exists within a certain network becomes public information. In high-security or scenarios requiring operational secrecy, consider the implications of advertising your infrastructure’s existence.</p>
+</section>
+<section id="example-configuration">
+<h3>Example Configuration<a class="headerlink" href="#example-configuration" title="Link to this heading">¶</a></h3>
+<p>Below is an example configuration for a public backbone gateway. This configuration publishes a high-value, publicly discoverable interface, that anyone can connect to.</p>
+<div class="highlight-ini notranslate"><div class="highlight"><pre><span></span><span class="k">[[My Public Gateway]]</span>
+<span class="w"> </span><span class="na">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">BackboneInterface</span>
+<span class="w"> </span><span class="na">mode</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">gateway</span>
+<span class="w"> </span><span class="na">listen_on</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">0.0.0.0</span>
+<span class="w"> </span><span class="na">port</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">4242</span>
+
+<span class="w"> </span><span class="c1"># Enable Discovery</span>
+<span class="w"> </span><span class="na">discoverable</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">yes</span>
+
+<span class="w"> </span><span class="c1"># Interface Details</span>
+<span class="w"> </span><span class="na">discovery_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">Region A Public Entrypoint</span>
+<span class="w"> </span><span class="na">announce_interval</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">720</span>
+
+<span class="w"> </span><span class="c1"># Use external script to resolve dynamic IP</span>
+<span class="w"> </span><span class="na">reachable_on</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">/usr/local/bin/get_external_ip.sh</span>
+
+<span class="w"> </span><span class="c1"># Generate high stamp value</span>
+<span class="w"> </span><span class="na">discovery_stamp_value</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">24</span>
+
+<span class="w"> </span><span class="c1"># Optional location data</span>
+<span class="w"> </span><span class="na">latitude</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">51.99714</span>
+<span class="w"> </span><span class="na">longitude</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">-0.74195</span>
+<span class="w"> </span><span class="na">height</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">15</span>
+</pre></div>
+</div>
+<p>The next example create an encrypted discovery-enabled interface, requiring a specific network identity to decode, and includes IFAC credentials for seamless authentication.</p>
+<div class="highlight-ini notranslate"><div class="highlight"><pre><span></span><span class="k">[[My Private Gateway]]</span>
+<span class="w"> </span><span class="na">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">BackboneInterface</span>
+<span class="w"> </span><span class="na">mode</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">gateway</span>
+<span class="w"> </span><span class="na">listen_on</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">0.0.0.0</span>
+<span class="w"> </span><span class="na">port</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">5858</span>
+<span class="w"> </span><span class="na">network_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">internal_1</span>
+<span class="w"> </span><span class="na">passphrase</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">Mevpekyafshak5Wr</span>
+
+<span class="w"> </span><span class="c1"># Enable Discovery</span>
+<span class="w"> </span><span class="na">discoverable</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">yes</span>
+
+<span class="w"> </span><span class="c1"># Interface Details</span>
+<span class="w"> </span><span class="na">discovery_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">Region A Private Backbone</span>
+<span class="w"> </span><span class="na">announce_interval</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">720</span>
+
+<span class="w"> </span><span class="c1"># Use external script to resolve dynamic IP</span>
+<span class="w"> </span><span class="na">reachable_on</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">/usr/local/bin/get_external_ip.sh</span>
+
+<span class="w"> </span><span class="c1"># Target stamp value</span>
+<span class="w"> </span><span class="na">discovery_stamp_value</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">22</span>
+
+<span class="w"> </span><span class="c1"># Encrypt announces for our network only</span>
+<span class="w"> </span><span class="na">discovery_encrypt</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">yes</span>
+
+<span class="w"> </span><span class="c1"># Include credentials so trusted</span>
+<span class="w"> </span><span class="c1"># peers can connect automatically</span>
+<span class="w"> </span><span class="na">publish_ifac</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">yes</span>
+
+<span class="w"> </span><span class="c1"># Optional location data</span>
+<span class="w"> </span><span class="na">latitude</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">34.06915</span>
+<span class="w"> </span><span class="na">longitude</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">-118.44318</span>
+<span class="w"> </span><span class="na">height</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">15</span>
+</pre></div>
+</div>
+<p>In the <code class="docutils literal notranslate"><span class="pre">[reticulum]</span></code> section of your configuration, you would define the network identity used for encryption as follows:</p>
+<div class="highlight-ini notranslate"><div class="highlight"><pre><span></span><span class="k">[reticulum]</span>
+<span class="na">...</span>
+<span class="c1"># The identity used to sign/encrypt discovery announces</span>
+<span class="na">network_identity</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">~/.reticulum/storage/identities/my_network_identity</span>
+<span class="na">...</span>
+</pre></div>
+</div>
+<p>With these configuration options applied, your Reticulum instance will actively participate in the network’s discovery ecosystem. Other peers running Reticulum with discovery enabled will be able to see your interface, validate its cryptographic stamp, and (depending on their configuration) automatically connect to it.</p>
+<p>For information on how to use these discovered interfaces and configure your system to auto-connect to them, refer to the <a class="reference internal" href="using.html#using-interface-discovery"><span class="std std-ref">Discovering Interfaces</span></a> chapter.</p>
+</section>
+</section>
<section id="common-interface-options">
<span id="interfaces-options"></span><h2>Common Interface Options<a class="headerlink" href="#common-interface-options" title="Link to this heading">¶</a></h2>
<p>A number of general configuration options are available on most interfaces.
@@ -1169,11 +1346,22 @@ sufficient, but it can be configured by using the <code class="docutils literal
option, to set the interface speed in <em>bits per second</em>.</div>
</div>
</li>
+<li><div class="line-block">
+<div class="line">The <code class="docutils literal notranslate"><span class="pre">bootstrap_only</span></code> option designates an interface as a temporary
+bridge for initial connectivity. If this option is enabled, the
+interface will be monitored and automatically detached once the
+number of auto-connected interfaces reaches the limit configured by
+<code class="docutils literal notranslate"><span class="pre">autoconnect_discovered_interfaces</span></code>. This is particularly useful
+for using a slow or expensive connection (such as a single LoRa
+link or a remote TCP tunnel) solely to discover better local
+infrastructure, which then supersedes the bootstrap interface.</div>
+</div>
+</li>
</ul>
</div></blockquote>
</section>
-<section id="interface-modes">
-<span id="interfaces-modes"></span><h2>Interface Modes<a class="headerlink" href="#interface-modes" title="Link to this heading">¶</a></h2>
+<section id="interfaces-modes">
+<span id="id4"></span><h2>Interface Modes<a class="headerlink" href="#interfaces-modes" title="Link to this heading">¶</a></h2>
<p>The optional <code class="docutils literal notranslate"><span class="pre">mode</span></code> setting is available on all interfaces, and allows
selecting the high-level behaviour of the interface from a number of modes.
These modes affect how Reticulum selects paths in the network, how announces
@@ -1471,8 +1659,16 @@ to <code class="docutils literal notranslate"><span class="pre">30</span></code>
<li><a class="reference internal" href="#pipe-interface">Pipe Interface</a></li>
<li><a class="reference internal" href="#kiss-interface">KISS Interface</a></li>
<li><a class="reference internal" href="#ax-25-kiss-interface">AX.25 KISS Interface</a></li>
-<li><a class="reference internal" href="#common-interface-options">Common Interface Options</a></li>
+<li><a class="reference internal" href="#discoverable-interfaces">Discoverable Interfaces</a><ul>
+<li><a class="reference internal" href="#enabling-discovery">Enabling Discovery</a></li>
+<li><a class="reference internal" href="#discovery-parameters">Discovery Parameters</a></li>
<li><a class="reference internal" href="#interface-modes">Interface Modes</a></li>
+<li><a class="reference internal" href="#security-considerations">Security Considerations</a></li>
+<li><a class="reference internal" href="#example-configuration">Example Configuration</a></li>
+</ul>
+</li>
+<li><a class="reference internal" href="#common-interface-options">Common Interface Options</a></li>
+<li><a class="reference internal" href="#interfaces-modes">Interface Modes</a></li>
<li><a class="reference internal" href="#announce-rate-control">Announce Rate Control</a></li>
<li><a class="reference internal" href="#new-destination-rate-limiting">New Destination Rate Limiting</a></li>
</ul>
@@ -1486,7 +1682,7 @@ to <code class="docutils literal notranslate"><span class="pre">30</span></code>
</aside>
</div>
-</div><script src="_static/documentation_options.js?v=d55fa986"></script>
+</div><script src="_static/documentation_options.js?v=fc837d61"></script>
<script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
diff --git a/docs/manual/networks.html b/docs/manual/networks.html
index 06befb6..75e5699 100644
--- a/docs/manual/networks.html
+++ b/docs/manual/networks.html
@@ -7,7 +7,7 @@
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
- <title>Building Networks - Reticulum Network Stack 1.0.5 documentation</title>
+ <title>Building Networks - Reticulum Network Stack 1.1.0 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
@@ -180,7 +180,7 @@
</label>
</div>
<div class="header-center">
- <a href="index.html"><div class="brand">Reticulum Network Stack 1.0.5 documentation</div></a>
+ <a href="index.html"><div class="brand">Reticulum Network Stack 1.1.0 documentation</div></a>
</div>
<div class="header-right">
<div class="theme-toggle-container theme-toggle-header">
@@ -204,7 +204,7 @@
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
</div>
- <span class="sidebar-brand-text">Reticulum Network Stack 1.0.5 documentation</span>
+ <span class="sidebar-brand-text">Reticulum Network Stack 1.1.0 documentation</span>
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
@@ -259,15 +259,39 @@
<article role="main" id="furo-main-content">
<section id="building-networks">
<span id="networks-main"></span><h1>Building Networks<a class="headerlink" href="#building-networks" title="Link to this heading">¶</a></h1>
-<p>This chapter will provide you with the knowledge needed to build networks with
-Reticulum, which can often be easier than using traditional stacks, since you
-don’t have to worry about coordinating addresses, subnets and routing for an
+<p>This chapter will provide you with the high-level knowledge needed to build networks with
+Reticulum. It will not, however tell you all you need to know to succesfully
+design and configure every kind of network you can imagine. For this, you will
+most likely need to read this manual in its entirity, invest significant time
+into experimenting with the stack, and learning functionality intuitively.</p>
+<p>Still, after reading this chapter, you should be well equipped to <em>start</em> that
+journey. While Reticulum is <strong>fundamentally different</strong> compared to other
+networking technologies, it can often be easier than using traditional stacks.
+If you’ve built networks before, you will probably have to forget, or at least
+temporarily ignore, a lot of things at this point. It will all makes sense in
+the end though. Hopefully.</p>
+<p>If you’re used to protocols like IP, let’s at least start with some relief:
+You don’t have to worry about coordinating addresses, subnets and routing for an
entire network that you might not know how will evolve in the future. With
Reticulum, you can simply add more segments to your network when it becomes
necessary, and Reticulum will handle the convergence of the entire network
-automatically.</p>
+automatically. There’s plenty more neat aspects like that to Reticulum, but
+we’re getting ahead of ourselves. Let’s cover the basics first.</p>
<section id="concepts-overview">
<h2>Concepts & Overview<a class="headerlink" href="#concepts-overview" title="Link to this heading">¶</a></h2>
+<p>Before you start building your own networks, it’s important to understand the
+fundamental principles that distinguish Reticulum networks from traditional
+networking approaches. These principles shape how you design your network,
+what trade-offs you encounter, and what capabilities you can rely on.</p>
+<p>Reticulum is not a single network you “join”, it is a toolkit for <em>creating</em> networks.
+You decide what mediums to use, how nodes connect, what trust boundaries exist,
+and what the network’s purpose is. Reticulum provides the cryptographic foundation,
+the transport mechanisms, and the convergence algorithms that make your design
+workable. You provide the intent and the structure.</p>
+<p>This approach offers tremendous flexibility, but it requires thinking in terms of
+different abstractions than those used in conventional networking.</p>
+<section id="introductory-considerations">
+<h3>Introductory Considerations<a class="headerlink" href="#introductory-considerations" title="Link to this heading">¶</a></h3>
<p>There are important points that need to be kept in mind when building networks
with Reticulum:</p>
<blockquote>
@@ -289,7 +313,12 @@ also very useful when just a few devices needs to communicate.</div>
<div class="line">Low-bandwidth networks, like LoRa and packet radio, can interoperate and
interconnect with much larger and higher bandwidth networks without issue.
Reticulum automatically manages the flow of information to and from various
-network segments, and when bandwidth is limited, local traffic is prioritised.</div>
+network segments, and when bandwidth is limited, local traffic is prioritised.
+You will, however, need to configure your interfaces correctly. If you tell
+Reticulum to pass all announce traffic from a gigabit link to a LoRa interfaces,
+it will try as best as possible to comply with this, while still respecting
+bandwidth limits, but you <em>will</em> waste a lot of precious bandwidth and airtime,
+and your LoRa network will not work very well.</div>
</div>
</li>
<li><div class="line-block">
@@ -361,69 +390,197 @@ chapter of this manual for interface configuration examples.</p>
decide which are suitable to use in any given situation, depending on where
traffic needs to flow.</p>
</section>
-<section id="example-scenarios">
-<h2>Example Scenarios<a class="headerlink" href="#example-scenarios" title="Link to this heading">¶</a></h2>
-<p>This section illustrates a few example scenarios, and how they would, in general
-terms, be planned, implemented and configured.</p>
-<section id="interconnected-lora-sites">
-<h3>Interconnected LoRa Sites<a class="headerlink" href="#interconnected-lora-sites" title="Link to this heading">¶</a></h3>
-<p>An organisation wants to provide communication and information services to it’s
-members, which are located mainly in three separate areas. Three suitable hill-top
-locations are found, where the organisation can install equipment: Site A, B and C.</p>
-<p>Since the amount of data that needs to be exchanged between users is mainly text-
-based, the bandwidth requirements are low, and LoRa radios are chosen to connect
-users to the network.</p>
-<p>Due to the hill-top locations found, there is radio line-of-sight between site A
-and B, and also between site B and C. Because of this, the organisation does not
-need to use the Internet to interconnect the sites, but purchases four Point-to-Point
-WiFi based radios for interconnecting the sites.</p>
-<p>At each site, a Raspberry Pi is installed to function as a gateway. A LoRa radio
-is connected to the Pi with a USB cable, and the WiFi radio is connected to the
-Ethernet port of the Pi. At site B, two WiFi radios are needed to be able to reach
-both site A and site C, so an extra Ethernet adapter is connected to the Pi in
-this location.</p>
-<p>Once the hardware has been installed, Reticulum is installed on all the Pis, and at
-site A and C, one interface is added for the LoRa radio, as well as one for the WiFi
-radio. At site B, an interface for the LoRa radio, and one interface for each WiFi
-radio is added to the Reticulum configuration file. The transport node option is
-enabled in the configuration of all three gateways.</p>
-<p>The network is now operational, and ready to serve users across all three areas.
-The organisation prepares a LoRa radio that is supplied to the end users, along
-with a Reticulum configuration file, that contains the right parameters for
-communicating with the LoRa radios installed at the gateway sites.</p>
-<p>Once users connect to the network, anyone will be able to communicate with anyone
-else across all three sites.</p>
+<section id="destinations-not-addresses">
+<h3>Destinations, Not Addresses<a class="headerlink" href="#destinations-not-addresses" title="Link to this heading">¶</a></h3>
+<p>In traditional networking, addresses are allocated from a managed space. If you want to
+communicate with another node, you need to know its address, and that address
+must be unique within the network segment. This requires coordination, either
+through manual assignment, DHCP servers, or other allocation mechanisms.</p>
+<p>Reticulum replaces addresses with <strong>destinations</strong>. A destination is identified by a 16-byte
+hash (128 bits) derived from a SHA-256 hash of the destination’s identifying
+characteristics. This hash serves as the address on the network. On the network, it
+is represented in binary, but when displayed to human users, it will usually look something like
+this <code class="docutils literal notranslate"><span class="pre"><13425ec15b621c1d928589718000d814></span></code>.</p>
+<p>The critical difference is that <em>any node can generate as many destinations as it
+needs, without coordination</em>. A destination’s uniqueness is guaranteed by the
+collision resistance of SHA-256 and the inclusion of the node’s public key in the
+hash calculation. Two nodes can both use the destination name
+<code class="docutils literal notranslate"><span class="pre">messenger.user.inbox</span></code>, but they will have different destination hashes because
+their public keys differ. Both can coexist on the same network without conflict.</p>
+<p>This has profound implications for network design:</p>
+<ul class="simple">
+<li><p><strong>No address allocation planning:</strong> You never need to reserve address ranges,
+plan subnets, or coordinate with other network operators. Nodes simply generate
+destinations and announce them.</p></li>
+<li><p><strong>Global portability:</strong> A destination is not tied to a physical location or
+network segment. A node can move its destinations across interfaces, mediums,
+or even between entirely separate Reticulum networks simply by sending an
+announce on the new medium.</p></li>
+<li><p><strong>Implicit authentication:</strong> Because destinations are bound to public keys,
+communication to a destination is inherently cryptographically authenticated.
+Only the holder of the corresponding private key can decrypt and respond to
+traffic addressed to that destination. This also makes application-level
+authentication <em>much</em> simpler, since it can directly use the foundational
+identity verification built into the core networking layer.</p></li>
+<li><p><strong>Identity abstraction:</strong> A single Reticulum Identity can create multiple
+destinations. This allows a single entity (a person, a device, a service) to
+present multiple endpoints without needing multiple cryptographic keypairs.</p></li>
+</ul>
</section>
-<section id="bridging-over-the-internet">
-<h3>Bridging Over the Internet<a class="headerlink" href="#bridging-over-the-internet" title="Link to this heading">¶</a></h3>
-<p>As the organisation grows, several new communities form in places too far away
-from the core network to be reachable over WiFi links. New gateways similar to those
-previously installed are set up for the new communities at the new sites D and E, but
-they are islanded from the core network, and only serve the local users.</p>
-<p>After investigating the options, it is found that it is possible to install an
-Internet connection at site A, and an interface on the Internet connection is
-configured for Reticulum on the Raspberry Pi at site A.</p>
-<p>A member of the organisation at site D, named Dori, is willing to help by sharing
-the Internet connection she already has in her home, and is able to leave a Raspberry
-Pi running. A new Reticulum interface is configured on her Pi, connecting to the newly
-enabled Internet interface on the gateway at site A. Dori is now connected to both
-the nodes at her own local site (through the hill-top LoRa gateway), and all the
-combined users of sites A, B and C. She then enables transport on her node, and
-traffic from site D can now reach everyone at site A, B and C, and vice versa.</p>
+<section id="transport-nodes-and-instances">
+<h3>Transport Nodes and Instances<a class="headerlink" href="#transport-nodes-and-instances" title="Link to this heading">¶</a></h3>
+<p>Reticulum distinguishes between two types of nodes: <strong>Instances</strong>
+and <strong>Transport Nodes</strong>. Every node running Reticulum is an Instance, but not
+every Instance is a Transport Node.</p>
+<p>A <strong>Reticulum Instance</strong> is any system running the Reticulum stack. It can create
+destinations, send and receive packets, establish links, and communicate with
+other nodes. It can also host destinations that are connectable for <em>anyone</em> else
+in the network. This means you can easily host globally available services from
+any location, including your home or office. Network-wide, global connectivity
+for all destinations is guaranteed, as long as there is <em>some</em> physical way to
+actually transport the packets. Instances are the default state and are appropriate for most end-user devices,
+such as phones, laptops, sensors, or any device that primarily consumes network services.</p>
+<p>A <strong>Transport Node</strong> is an Instance that has been explicitly configured to
+participate in network-wide transport. Transport nodes forward packets across
+hops, propagate announces, maintain path tables, and serve path requests on
+behalf of other nodes. When a destination sends an announce, Transport Nodes
+receive it, remember the path, and rebroadcast it to other interfaces. When a node
+needs to reach a destination it doesn’t have a path for, Transport Nodes help
+resolve the path through the network.</p>
+<p>Even devices hosting services or serving content should probably just be configured
+as instances, and themselves connect to wider networks via a Transport Node.
+In some situations, this may not be practical though, and as an example, it is
+entirely viable to host a personal Transport Node on a Raspberry Pi, while it
+is at the same time running an LXMF propagation node, and hosting your personal
+site or files over Reticulum.</p>
+<p>The distinction is important. <strong>Not</strong> every node should be a Transport Node:</p>
+<ul class="simple">
+<li><p><strong>Resource consumption:</strong> Transport nodes maintain path tables, process
+announces, and forward traffic. This requires memory and CPU resources that
+may be limited on low-powered devices.</p></li>
+<li><p><strong>Stability requirements:</strong> Transport nodes contribute to network convergence.
+If Transport Nodes frequently go offline, path tables become stale and
+convergence suffers. Stable, always-on nodes make better Transport Nodes.</p></li>
+<li><p><strong>Bandwidth considerations:</strong> Transport nodes process and rebroadcast network
+maintenance traffic. On very low-bandwidth mediums, having too many Transport
+Nodes will consume capacity that should be used for actual data.</p></li>
+</ul>
+<p>In practice, a network typically has a relatively small number of Transport Nodes
+strategically placed to provide coverage and connectivity. End-user devices run
+as Instances, connecting through nearby Transport Nodes to reach the wider network.
+This pattern mirrors traditional networking where routers forward traffic while
+end hosts simply consume connectivity, but with the crucial difference that any
+node <em>can</em> become a router if needed, and the decision is yours to make based on
+your network’s requirements.</p>
+<p>Transport nodes also function as distributed cryptographic keystores. When a
+destination announces itself, Transport Nodes cache the public key and destination
+information. Other nodes can request unknown public keys from the network, and
+Transport Nodes respond with the cached information. This eliminates the need for
+a central directory service while ensuring that public keys remain available
+throughout the network.</p>
</section>
-<section id="growth-and-convergence">
-<h3>Growth and Convergence<a class="headerlink" href="#growth-and-convergence" title="Link to this heading">¶</a></h3>
-<p>As the organisation grows, more gateways are added to keep up with the growing user
-base. Some local gateways even add VHF radios and packet modems to reach outlying users
-and communities that are out of reach for the LoRa radios and WiFi backhauls.</p>
-<p>As more sites, gateways and users are connected, the amount of coordination required
-is kept to a minimum. If one community wants to add connectivity to the next one
-over, it can simply be done without having to involve everyone or coordinate address
-space or routing tables.</p>
-<p>With the added geographical coverage, the operators at site A one day find that
-the original internet bridged interfaces are no longer utilised. The network has
-converged to be completely self-connected, and the sites that were once poorly
-connected outliers are now an integral part of the network.</p>
+<section id="trustless-networking">
+<h3>Trustless Networking<a class="headerlink" href="#trustless-networking" title="Link to this heading">¶</a></h3>
+<p>Traditional network security models assume high levels of trust at
+specific layers. You might trust your ISP to deliver packets without inspection,
+or trust your VPN provider to handle your traffic, or trust the network
+administrator to configure firewalls appropriately. These trust relationships
+create vulnerabilities and dependencies.</p>
+<p>Reticulum is designed to function in <strong>open, trustless environments</strong>. This
+means the protocol makes no assumptions about the trustworthiness of the network
+infrastructure, the other participants, or the transport mediums. Every aspect
+of communication is secured cryptographically:</p>
+<ul class="simple">
+<li><p><strong>Traffic encryption:</strong> All traffic to single destinations is encrypted using
+ephemeral keys.</p></li>
+<li><p><strong>Source anonymity:</strong> Reticulum packets do not include source addresses.
+An observer intercepting a packet cannot determine who sent it, only who it is
+addressed to (unless IFAC is enabled, in which case nothing can be determined).
+This provides initiator anonymity by default.</p></li>
+<li><p><strong>Path verification:</strong> The announce mechanism includes cryptographic signatures that
+prove the authenticity of destination announcements.</p></li>
+<li><p><strong>Unforgeable delivery confirmations:</strong> When a destination proves receipt of a
+packet, the proof is signed with the destination’s identity key. This prevents
+false acknowledgments and ensures reliable delivery verification.</p></li>
+<li><p><strong>Interface authentication:</strong> When using Interface Access Codes (IFAC), packets
+on authenticated interfaces carry signatures derived from a shared secret. Only
+nodes with the correct network name and passphrase can generate valid packets, allowing creation
+of virtual private networks on shared mediums.</p></li>
+</ul>
+<p>The trustless design has important consequences for network design:</p>
+<ul class="simple">
+<li><p><strong>Open-access networks are viable:</strong> You can build networks that anyone can
+join without pre-approval. Because traffic is encrypted and authenticated end-
+to-end, participants cannot interfere with each other’s private communication,
+even if they share the same transport infrastructure.</p></li>
+<li><p><strong>No traffic inspection or prioritization:</strong> Because traffic contents and
+sources are opaque to intermediate nodes, there is no mechanism for filtering,
+prioritizing, or throttling traffic based on its type or origin. All traffic
+is treated equally. From a neutrality perspective, this is a feature.</p></li>
+<li><p><strong>Adversarial resilience:</strong> The network can operate even if some nodes are
+malicious or controlled by adversaries. While a malicious Transport Node could
+refuse to forward certain traffic or drop packets, it cannot decrypt, modify,
+or impersonate legitimate traffic. Redundant paths and multiple Transport Nodes
+mitigate the impact of malicious nodes.</p></li>
+</ul>
+<p>Of course, you can also create closed networks. Interface Access
+Codes allow you to restrict participation on specific interfaces. Network
+Identities enable you to verify that discovered interfaces belong to trusted
+operators. Blackhole management lets you block malicious identities. Reticulum
+provides both the tools for open networks and the controls for closed ones. The
+choice is yours based on your requirements.</p>
+</section>
+<section id="heterogeneous-connectivity">
+<h3>Heterogeneous Connectivity<a class="headerlink" href="#heterogeneous-connectivity" title="Link to this heading">¶</a></h3>
+<p>In conventional networking, mixing different transport mediums typically requires
+gateways, translation layers, and careful configuration. A WiFi network doesn’t
+natively interoperate with a packet radio network without additional infrastructure,
+and you can’t just download a car over a serial port, or send an encrypted message
+in a QR code.</p>
+<p>Reticulum treats <strong>heterogeneity as a core premise</strong>. The protocol is designed
+to seamlessly mix mediums with vastly different characteristics:</p>
+<ul class="simple">
+<li><p><strong>Bandwidth:</strong> LoRa links operating at a few hundred bits per second can
+interconnect with gigabit Ethernet backbones. Reticulum automatically manages
+the flow of information, prioritizing local traffic on slow segments while
+allowing global convergence.</p></li>
+<li><p><strong>Latency:</strong> Satellite links with multi-second latency can coexist with local
+links measured in milliseconds. The transport system handles timing, asynchronous
+delivery and retransmissions transparently.</p></li>
+<li><p><strong>Topology:</strong> Point-to-point microwave links, broadcast radio networks,
+switched Ethernet fabrics, and virtual tunnels over the Internet can all be
+part of the same Reticulum network.</p></li>
+<li><p><strong>Reliability:</strong> Intermittent connections that come and go (such as mobile
+devices or opportunistic radio contacts) can participate alongside always-on
+infrastructure. Reticulum gracefully handles link loss and reconnection.</p></li>
+</ul>
+<p>This heterogeneity is achieved through several design elements:</p>
+<ul class="simple">
+<li><p><strong>Expandable, medium-agnostic interface system:</strong> Reticulum communicates with the physical
+world through interface modules. Adding support for a new medium is a matter
+of implementing an interface class. The protocol itself remains unchanged.</p></li>
+<li><p><strong>Interface modes:</strong> Different modes (<code class="docutils literal notranslate"><span class="pre">full</span></code>, <code class="docutils literal notranslate"><span class="pre">gateway</span></code>, <code class="docutils literal notranslate"><span class="pre">access_point</span></code>,
+<code class="docutils literal notranslate"><span class="pre">roaming</span></code>, <code class="docutils literal notranslate"><span class="pre">boundary</span></code>) allow you to configure how interfaces interact with
+the wider network based on their characteristics and role.</p></li>
+<li><p><strong>Announce propagation rules:</strong> Announces are forwarded between interfaces
+according to rules that account for bandwidth limitations and interface modes.
+Slow segments are not overwhelmed by traffic from fast segments.</p></li>
+<li><p><strong>Local traffic prioritization:</strong> When bandwidth is constrained, Reticulum
+prioritizes announces for nearby destinations. This ensures that local
+connectivity remains functional even when global convergence is incomplete.</p></li>
+</ul>
+<p>For network designers, this means you are free to use whatever mediums are
+available, affordable, or appropriate for your situation. You might use LoRa for
+wide-area low-bandwidth coverage, WiFi for local high-capacity links, I2P for
+anonymous Internet connectivity, and Ethernet for infrastructure backhauls, all
+within the same network. Reticulum handles the translation and coordination
+automatically.</p>
+<p>The key design consideration is not whether different mediums can work together
+(they can), but <strong>how</strong> they should work together based on your goals. A node
+with multiple interfaces spanning heterogeneous mediums needs to be configured
+with appropriate interface modes so that traffic flows efficiently. A gateway
+connecting a slow LoRa segment to a fast Internet backbone should be configured
+differently than a mobile device roaming between radio cells.</p>
</section>
</section>
</section>
@@ -483,11 +640,12 @@ connected outliers are now an integral part of the network.</p>
<div class="toc-tree">
<ul>
<li><a class="reference internal" href="#">Building Networks</a><ul>
-<li><a class="reference internal" href="#concepts-overview">Concepts & Overview</a></li>
-<li><a class="reference internal" href="#example-scenarios">Example Scenarios</a><ul>
-<li><a class="reference internal" href="#interconnected-lora-sites">Interconnected LoRa Sites</a></li>
-<li><a class="reference internal" href="#bridging-over-the-internet">Bridging Over the Internet</a></li>
-<li><a class="reference internal" href="#growth-and-convergence">Growth and Convergence</a></li>
+<li><a class="reference internal" href="#concepts-overview">Concepts & Overview</a><ul>
+<li><a class="reference internal" href="#introductory-considerations">Introductory Considerations</a></li>
+<li><a class="reference internal" href="#destinations-not-addresses">Destinations, Not Addresses</a></li>
+<li><a class="reference internal" href="#transport-nodes-and-instances">Transport Nodes and Instances</a></li>
+<li><a class="reference internal" href="#trustless-networking">Trustless Networking</a></li>
+<li><a class="reference internal" href="#heterogeneous-connectivity">Heterogeneous Connectivity</a></li>
</ul>
</li>
</ul>
@@ -501,7 +659,7 @@ connected outliers are now an integral part of the network.</p>
</aside>
</div>
-</div><script src="_static/documentation_options.js?v=d55fa986"></script>
+</div><script src="_static/documentation_options.js?v=fc837d61"></script>
<script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
diff --git a/docs/manual/objects.inv b/docs/manual/objects.inv
index 053bdd4..712966f 100644
Binary files a/docs/manual/objects.inv and b/docs/manual/objects.inv differ
diff --git a/docs/manual/reference.html b/docs/manual/reference.html
index e38c1b3..81c0e10 100644
--- a/docs/manual/reference.html
+++ b/docs/manual/reference.html
@@ -7,7 +7,7 @@
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
- <title>API Reference - Reticulum Network Stack 1.0.5 documentation</title>
+ <title>API Reference - Reticulum Network Stack 1.1.0 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
@@ -180,7 +180,7 @@
</label>
</div>
<div class="header-center">
- <a href="index.html"><div class="brand">Reticulum Network Stack 1.0.5 documentation</div></a>
+ <a href="index.html"><div class="brand">Reticulum Network Stack 1.1.0 documentation</div></a>
</div>
<div class="header-right">
<div class="theme-toggle-container theme-toggle-header">
@@ -204,7 +204,7 @@
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
</div>
- <span class="sidebar-brand-text">Reticulum Network Stack 1.0.5 documentation</span>
+ <span class="sidebar-brand-text">Reticulum Network Stack 1.1.0 documentation</span>
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
@@ -395,6 +395,54 @@ can remotely query and manage this instance.</p>
</dl>
</dd></dl>
+<dl class="py method">
+<dt class="sig sig-object py" id="RNS.Reticulum.required_discovery_value">
+<em class="property"><span class="k"><span class="pre">static</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">required_discovery_value</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Reticulum.required_discovery_value" title="Link to this definition">¶</a></dt>
+<dd><p>Returns the required stamp value for a discovered interface
+to be considered valid and remembered.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dd class="field-odd"><p>The required stamp value as an integer.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="RNS.Reticulum.publish_blackhole_enabled">
+<em class="property"><span class="k"><span class="pre">static</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">publish_blackhole_enabled</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Reticulum.publish_blackhole_enabled" title="Link to this definition">¶</a></dt>
+<dd><p>Returns whether blackhole list publishing is enabled for the
+running instance.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dd class="field-odd"><p>True if blackhole list publishing is enabled, False if not.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="RNS.Reticulum.blackhole_sources">
+<em class="property"><span class="k"><span class="pre">static</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">blackhole_sources</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Reticulum.blackhole_sources" title="Link to this definition">¶</a></dt>
+<dd><p>Returns the list of transport identity hashes from which
+blackhole lists are sourced.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dd class="field-odd"><p>A list of identity hashes.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="RNS.Reticulum.interface_discovery_sources">
+<em class="property"><span class="k"><span class="pre">static</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">interface_discovery_sources</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Reticulum.interface_discovery_sources" title="Link to this definition">¶</a></dt>
+<dd><p>Returns the list of network identity hashes from which
+interfaces are discovered.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Returns<span class="colon">:</span></dt>
+<dd class="field-odd"><p>A list of identity hashes.</p>
+</dd>
+</dl>
+</dd></dl>
+
</dd></dl>
<p id="api-identity"><h3> Identity </h3></p>
@@ -2125,6 +2173,25 @@ announces. See the <a class="reference internal" href="examples.html#example-ann
</dl>
</dd></dl>
+<dl class="py method">
+<dt class="sig sig-object py" id="RNS.Transport.await_path">
+<em class="property"><span class="k"><span class="pre">static</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">await_path</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">destination_hash</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">timeout</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">on_interface</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Transport.await_path" title="Link to this definition">¶</a></dt>
+<dd><p>Requests a path to the destination from the network and
+blocks until the path is available, or the timeout is reached.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>destination_hash</strong> – A destination hash as <em>bytes</em>.</p></li>
+<li><p><strong>timeout</strong> – An optional timeout in seconds.</p></li>
+<li><p><strong>on_interface</strong> – If specified, the path request will only be sent on this interface. In normal use, Reticulum handles this automatically, and this parameter should not be used.</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p><em>True</em> if a path to the destination is found, otherwise <em>False</em>.</p>
+</dd>
+</dl>
+</dd></dl>
+
<dl class="py method">
<dt class="sig sig-object py" id="RNS.Transport.request_path">
<em class="property"><span class="k"><span class="pre">static</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">request_path</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">destination_hash</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">on_interface</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tag</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">recursive</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#RNS.Transport.request_path" title="Link to this definition">¶</a></dt>
@@ -2202,6 +2269,10 @@ will announce it.</p>
<li><a class="reference internal" href="#RNS.Reticulum.transport_enabled"><code class="docutils literal notranslate"><span class="pre">transport_enabled()</span></code></a></li>
<li><a class="reference internal" href="#RNS.Reticulum.link_mtu_discovery"><code class="docutils literal notranslate"><span class="pre">link_mtu_discovery()</span></code></a></li>
<li><a class="reference internal" href="#RNS.Reticulum.remote_management_enabled"><code class="docutils literal notranslate"><span class="pre">remote_management_enabled()</span></code></a></li>
+<li><a class="reference internal" href="#RNS.Reticulum.required_discovery_value"><code class="docutils literal notranslate"><span class="pre">required_discovery_value()</span></code></a></li>
+<li><a class="reference internal" href="#RNS.Reticulum.publish_blackhole_enabled"><code class="docutils literal notranslate"><span class="pre">publish_blackhole_enabled()</span></code></a></li>
+<li><a class="reference internal" href="#RNS.Reticulum.blackhole_sources"><code class="docutils literal notranslate"><span class="pre">blackhole_sources()</span></code></a></li>
+<li><a class="reference internal" href="#RNS.Reticulum.interface_discovery_sources"><code class="docutils literal notranslate"><span class="pre">interface_discovery_sources()</span></code></a></li>
</ul>
</li>
<li><a class="reference internal" href="#RNS.Identity"><code class="docutils literal notranslate"><span class="pre">Identity</span></code></a><ul>
@@ -2371,6 +2442,7 @@ will announce it.</p>
<li><a class="reference internal" href="#RNS.Transport.hops_to"><code class="docutils literal notranslate"><span class="pre">hops_to()</span></code></a></li>
<li><a class="reference internal" href="#RNS.Transport.next_hop"><code class="docutils literal notranslate"><span class="pre">next_hop()</span></code></a></li>
<li><a class="reference internal" href="#RNS.Transport.next_hop_interface"><code class="docutils literal notranslate"><span class="pre">next_hop_interface()</span></code></a></li>
+<li><a class="reference internal" href="#RNS.Transport.await_path"><code class="docutils literal notranslate"><span class="pre">await_path()</span></code></a></li>
<li><a class="reference internal" href="#RNS.Transport.request_path"><code class="docutils literal notranslate"><span class="pre">request_path()</span></code></a></li>
</ul>
</li>
@@ -2385,7 +2457,7 @@ will announce it.</p>
</aside>
</div>
-</div><script src="_static/documentation_options.js?v=d55fa986"></script>
+</div><script src="_static/documentation_options.js?v=fc837d61"></script>
<script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
diff --git a/docs/manual/search.html b/docs/manual/search.html
index c286409..9bbaf07 100644
--- a/docs/manual/search.html
+++ b/docs/manual/search.html
@@ -8,7 +8,7 @@
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
<meta name="robots" content="noindex" />
-<title>Search - Reticulum Network Stack 1.0.5 documentation</title><link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
+<title>Search - Reticulum Network Stack 1.1.0 documentation</title><link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?v=8dab3a3b" />
@@ -180,7 +180,7 @@
</label>
</div>
<div class="header-center">
- <a href="index.html"><div class="brand">Reticulum Network Stack 1.0.5 documentation</div></a>
+ <a href="index.html"><div class="brand">Reticulum Network Stack 1.1.0 documentation</div></a>
</div>
<div class="header-right">
<div class="theme-toggle-container theme-toggle-header">
@@ -204,7 +204,7 @@
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
</div>
- <span class="sidebar-brand-text">Reticulum Network Stack 1.0.5 documentation</span>
+ <span class="sidebar-brand-text">Reticulum Network Stack 1.1.0 documentation</span>
</a><form class="sidebar-search-container" method="get" action="#" role="search">
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
@@ -299,7 +299,7 @@
</aside>
</div>
-</div><script src="_static/documentation_options.js?v=d55fa986"></script>
+</div><script src="_static/documentation_options.js?v=fc837d61"></script>
<script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
diff --git a/docs/manual/searchindex.js b/docs/manual/searchindex.js
index 3d3bece..4082f51 100644
--- a/docs/manual/searchindex.js
+++ b/docs/manual/searchindex.js
@@ -1 +1 @@
-Search.setIndex({"alltitles":{"API Reference":[[7,null]],"ARM64":[[2,"arm64"]],"AX.25 KISS Interface":[[5,"ax-25-kiss-interface"]],"Adding Radio Interfaces":[[2,"adding-radio-interfaces"]],"An Explanation of Reticulum for Human Beings":[[1,null]],"Android":[[2,"android"]],"Announce":[[0,"announce"]],"Announce Propagation Rules":[[9,"announce-propagation-rules"]],"Announce Rate Control":[[5,"announce-rate-control"]],"Auto Interface":[[5,"auto-interface"]],"Backbone Interface":[[5,"backbone-interface"]],"Bridging Over the Internet":[[6,"bridging-over-the-internet"]],"Broadcast":[[0,"broadcast"]],"Buffer":[[0,"buffer"]],"Building Networks":[[6,null]],"Caveat Emptor":[[11,"caveat-emptor"]],"Channel":[[0,"channel"]],"Code Examples":[[0,null]],"Combining Hardware Types":[[3,"combining-hardware-types"]],"Common Interface Options":[[5,"common-interface-options"]],"Communications Hardware":[[3,null]],"Concepts & Overview":[[6,"concepts-overview"]],"Configuration & Data":[[10,"configuration-data"]],"Configuring Interfaces":[[5,null]],"Connect to the Public Testnet":[[2,"connect-to-the-public-testnet"]],"Connecting Remotes":[[5,"connecting-remotes"]],"Connecting Reticulum Instances Over the Internet":[[2,"connecting-reticulum-instances-over-the-internet"]],"Contribute Code":[[8,"contribute-code"]],"Creating RNodes":[[3,"creating-rnodes"]],"Creating a Network With Reticulum":[[2,"creating-a-network-with-reticulum"]],"Creating and Using Custom Interfaces":[[2,"creating-and-using-custom-interfaces"]],"Cryptographic Primitives":[[9,"cryptographic-primitives"]],"Current Status":[[11,"current-status"]],"Custom Interfaces":[[0,"custom-interfaces"],[5,"custom-interfaces"]],"Debian Bookworm":[[2,"debian-bookworm"]],"Destination Naming":[[9,"destination-naming"]],"Destinations":[[9,"destinations"]],"Develop a Program with Reticulum":[[2,"develop-a-program-with-reticulum"]],"Donations":[[8,"donations"]],"Echo":[[0,"echo"]],"Ethernet-based Hardware":[[3,"ethernet-based-hardware"]],"Example Scenarios":[[6,"example-scenarios"]],"Filetransfer":[[0,"filetransfer"]],"Fixed Serial Port Names":[[10,"fixed-serial-port-names"]],"Getting Further":[[9,"getting-further"]],"Getting Started Fast":[[2,null]],"Goals":[[9,"goals"]],"Growth and Convergence":[[6,"growth-and-convergence"]],"Heltec LoRa32 v2.0":[[3,"heltec-lora32-v2-0"]],"Heltec LoRa32 v3.0":[[3,"heltec-lora32-v3-0"]],"Heltec LoRa32 v4.0":[[3,"heltec-lora32-v4-0"]],"Heltec T114":[[3,"heltec-t114"]],"Hosting Public Entrypoints":[[2,"hosting-public-entrypoints"]],"I2P Interface":[[5,"i2p-interface"]],"Identification":[[0,"example-identify"]],"Identities":[[9,"understanding-identities"]],"Improving System Configuration":[[10,"improving-system-configuration"]],"Included Utility Programs":[[10,"included-utility-programs"]],"Indices and Tables":[[4,"indices-and-tables"]],"Installation":[[3,"installation"]],"Interconnected LoRa Sites":[[6,"interconnected-lora-sites"]],"Interface Access Codes":[[9,"interface-access-codes"]],"Interface Modes":[[5,"interface-modes"]],"Interface Types and Devices":[[11,"interface-types-and-devices"]],"Introduction & Basic Functionality":[[9,"introduction-basic-functionality"]],"KISS Interface":[[5,"kiss-interface"]],"LilyGO LoRa32 v1.0":[[3,"lilygo-lora32-v1-0"]],"LilyGO LoRa32 v2.0":[[3,"lilygo-lora32-v2-0"]],"LilyGO LoRa32 v2.1":[[3,"lilygo-lora32-v2-1"]],"LilyGO T-Beam":[[3,"lilygo-t-beam"]],"LilyGO T-Beam Supreme":[[3,"lilygo-t-beam-supreme"]],"LilyGO T-Deck":[[3,"lilygo-t-deck"]],"LilyGO T-Echo":[[3,"lilygo-t-echo"]],"LilyGO T3S3":[[3,"lilygo-t3s3"]],"Link":[[0,"link"]],"Link Establishment in Detail":[[9,"link-establishment-in-detail"]],"Listeners":[[5,"listeners"]],"MacOS":[[2,"macos"]],"MeshChat":[[2,"meshchat"]],"Minimal":[[0,"minimal"]],"Motivation":[[9,"motivation"]],"New Destination Rate Limiting":[[5,"new-destination-rate-limiting"]],"Node Types":[[9,"node-types"]],"Nomad Network":[[2,"nomad-network"]],"OpenCom XL":[[3,"opencom-xl"]],"OpenWRT":[[2,"openwrt"]],"Packet Prioritisation":[[9,"packet-prioritisation"]],"Packet Radio Modems":[[3,"packet-radio-modems"]],"Participate in Reticulum Development":[[2,"participate-in-reticulum-development"]],"Pipe Interface":[[5,"pipe-interface"]],"Platform-Specific Install Notes":[[2,"platform-specific-install-notes"]],"Protocol Specifics":[[9,"protocol-specifics"]],"Provide Feedback":[[8,"provide-feedback"]],"Public Key Announcements":[[9,"public-key-announcements"]],"Pure-Python Reticulum":[[2,"pure-python-reticulum"]],"RAK4631-based Boards":[[3,"rak4631-based-boards"]],"RISC-V":[[2,"risc-v"]],"RNode":[[3,"rnode"]],"RNode LoRa Interface":[[5,"rnode-lora-interface"]],"RNode Multi Interface":[[5,"rnode-multi-interface"]],"Raspberry Pi":[[2,"raspberry-pi"]],"Reaching the Destination":[[9,"reaching-the-destination"]],"Reference Setup":[[9,"reference-setup"]],"Remote Management":[[10,"remote-management"]],"Remote Shell":[[2,"remote-shell"]],"Requests & Responses":[[0,"requests-responses"]],"Resolving Dependency & Installation Issues":[[2,"resolving-dependency-installation-issues"]],"Resources":[[9,"resources"]],"Reticulum Network Stack Manual":[[4,null]],"Reticulum Transport":[[9,"reticulum-transport"]],"Reticulum as a System Service":[[10,"reticulum-as-a-system-service"]],"Serial Interface":[[5,"serial-interface"]],"Serial Lines & Devices":[[3,"serial-lines-devices"]],"Sideband":[[2,"sideband"]],"Standalone Reticulum Installation":[[2,"standalone-reticulum-installation"]],"Support Reticulum":[[8,null]],"Supported Boards and Devices":[[3,"supported-boards-and-devices"]],"Systemwide Service":[[10,"systemwide-service"]],"TCP Client Interface":[[5,"tcp-client-interface"]],"TCP Server Interface":[[5,"tcp-server-interface"]],"Table Of Contents":[[4,"table-of-contents"]],"The Announce Mechanism in Detail":[[9,"the-announce-mechanism-in-detail"]],"The rncp Utility":[[10,"the-rncp-utility"]],"The rnid Utility":[[10,"the-rnid-utility"]],"The rnodeconf Utility":[[10,"the-rnodeconf-utility"]],"The rnpath Utility":[[10,"the-rnpath-utility"]],"The rnprobe Utility":[[10,"the-rnprobe-utility"]],"The rnsd Utility":[[10,"the-rnsd-utility"]],"The rnstatus Utility":[[10,"the-rnstatus-utility"]],"The rnx Utility":[[10,"the-rnx-utility"]],"Try Using a Reticulum-based Program":[[2,"try-using-a-reticulum-based-program"]],"UDP Interface":[[5,"udp-interface"]],"Ubuntu Lunar":[[2,"ubuntu-lunar"]],"Understanding Reticulum":[[9,null]],"Unsigned RNode v2.x":[[3,"unsigned-rnode-v2-x"]],"Usage with Reticulum":[[3,"usage-with-reticulum"]],"Userspace Service":[[10,"userspace-service"]],"Using Reticulum on Your System":[[10,null]],"Using the Included Utilities":[[2,"using-the-included-utilities"]],"What does Reticulum Offer?":[[11,"what-does-reticulum-offer"]],"What is Reticulum?":[[11,null]],"Where can Reticulum be Used?":[[11,"where-can-reticulum-be-used"]],"WiFi-based Hardware":[[3,"wifi-based-hardware"]],"Windows":[[2,"windows"]],"Wire Format":[[9,"wire-format"]]},"docnames":["examples","forhumans","gettingstartedfast","hardware","index","interfaces","networks","reference","support","understanding","using","whatis"],"envversion":{"sphinx":65,"sphinx.domains.c":3,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":9,"sphinx.domains.index":1,"sphinx.domains.javascript":3,"sphinx.domains.math":2,"sphinx.domains.python":4,"sphinx.domains.rst":2,"sphinx.domains.std":2},"filenames":["examples.rst","forhumans.rst","gettingstartedfast.rst","hardware.rst","index.rst","interfaces.rst","networks.rst","reference.rst","support.rst","understanding.rst","using.rst","whatis.rst"],"indexentries":{"__init__() (rns.rawchannelreader method)":[[7,"RNS.RawChannelReader.__init__",false]],"__init__() (rns.rawchannelwriter method)":[[7,"RNS.RawChannelWriter.__init__",false]],"accepts_links() (rns.destination method)":[[7,"RNS.Destination.accepts_links",false]],"add_message_handler() (rns.channel.channel method)":[[7,"RNS.Channel.Channel.add_message_handler",false]],"add_ready_callback() (rns.rawchannelreader method)":[[7,"RNS.RawChannelReader.add_ready_callback",false]],"advertise() (rns.resource method)":[[7,"RNS.Resource.advertise",false]],"announce() (rns.destination method)":[[7,"RNS.Destination.announce",false]],"announce_cap (rns.reticulum attribute)":[[7,"RNS.Reticulum.ANNOUNCE_CAP",false]],"app_and_aspects_from_name() (rns.destination static method)":[[7,"RNS.Destination.app_and_aspects_from_name",false]],"buffer (class in rns)":[[7,"RNS.Buffer",false]],"cancel() (rns.resource method)":[[7,"RNS.Resource.cancel",false]],"channel (class in rns.channel)":[[7,"RNS.Channel.Channel",false]],"clear_default_app_data() (rns.destination method)":[[7,"RNS.Destination.clear_default_app_data",false]],"concluded() (rns.requestreceipt method)":[[7,"RNS.RequestReceipt.concluded",false]],"create_bidirectional_buffer() (rns.buffer static method)":[[7,"RNS.Buffer.create_bidirectional_buffer",false]],"create_keys() (rns.destination method)":[[7,"RNS.Destination.create_keys",false]],"create_reader() (rns.buffer static method)":[[7,"RNS.Buffer.create_reader",false]],"create_writer() (rns.buffer static method)":[[7,"RNS.Buffer.create_writer",false]],"current_ratchet_id() (rns.identity static method)":[[7,"RNS.Identity.current_ratchet_id",false]],"curve (rns.identity attribute)":[[7,"RNS.Identity.CURVE",false]],"curve (rns.link attribute)":[[7,"RNS.Link.CURVE",false]],"decrypt() (rns.destination method)":[[7,"RNS.Destination.decrypt",false]],"decrypt() (rns.identity method)":[[7,"RNS.Identity.decrypt",false]],"deregister_announce_handler() (rns.transport static method)":[[7,"RNS.Transport.deregister_announce_handler",false]],"deregister_request_handler() (rns.destination method)":[[7,"RNS.Destination.deregister_request_handler",false]],"destination (class in rns)":[[7,"RNS.Destination",false]],"enable_ratchets() (rns.destination method)":[[7,"RNS.Destination.enable_ratchets",false]],"encrypt() (rns.destination method)":[[7,"RNS.Destination.encrypt",false]],"encrypt() (rns.identity method)":[[7,"RNS.Identity.encrypt",false]],"encrypted_mdu (rns.packet attribute)":[[7,"RNS.Packet.ENCRYPTED_MDU",false]],"enforce_ratchets() (rns.destination method)":[[7,"RNS.Destination.enforce_ratchets",false]],"establishment_timeout_per_hop (rns.link attribute)":[[7,"RNS.Link.ESTABLISHMENT_TIMEOUT_PER_HOP",false]],"expand_name() (rns.destination static method)":[[7,"RNS.Destination.expand_name",false]],"from_bytes() (rns.identity static method)":[[7,"RNS.Identity.from_bytes",false]],"from_file() (rns.identity static method)":[[7,"RNS.Identity.from_file",false]],"full_hash() (rns.identity static method)":[[7,"RNS.Identity.full_hash",false]],"get_age() (rns.link method)":[[7,"RNS.Link.get_age",false]],"get_channel() (rns.link method)":[[7,"RNS.Link.get_channel",false]],"get_data_size() (rns.resource method)":[[7,"RNS.Resource.get_data_size",false]],"get_establishment_rate() (rns.link method)":[[7,"RNS.Link.get_establishment_rate",false]],"get_expected_rate() (rns.link method)":[[7,"RNS.Link.get_expected_rate",false]],"get_hash() (rns.resource method)":[[7,"RNS.Resource.get_hash",false]],"get_instance() (rns.reticulum static method)":[[7,"RNS.Reticulum.get_instance",false]],"get_mdu() (rns.link method)":[[7,"RNS.Link.get_mdu",false]],"get_mode() (rns.link method)":[[7,"RNS.Link.get_mode",false]],"get_mtu() (rns.link method)":[[7,"RNS.Link.get_mtu",false]],"get_parts() (rns.resource method)":[[7,"RNS.Resource.get_parts",false]],"get_private_key() (rns.destination method)":[[7,"RNS.Destination.get_private_key",false]],"get_private_key() (rns.identity method)":[[7,"RNS.Identity.get_private_key",false]],"get_progress() (rns.requestreceipt method)":[[7,"RNS.RequestReceipt.get_progress",false]],"get_progress() (rns.resource method)":[[7,"RNS.Resource.get_progress",false]],"get_public_key() (rns.identity method)":[[7,"RNS.Identity.get_public_key",false]],"get_q() (rns.link method)":[[7,"RNS.Link.get_q",false]],"get_q() (rns.packet method)":[[7,"RNS.Packet.get_q",false]],"get_random_hash() (rns.identity static method)":[[7,"RNS.Identity.get_random_hash",false]],"get_remote_identity() (rns.link method)":[[7,"RNS.Link.get_remote_identity",false]],"get_request_id() (rns.requestreceipt method)":[[7,"RNS.RequestReceipt.get_request_id",false]],"get_response() (rns.requestreceipt method)":[[7,"RNS.RequestReceipt.get_response",false]],"get_response_time() (rns.requestreceipt method)":[[7,"RNS.RequestReceipt.get_response_time",false]],"get_rssi() (rns.link method)":[[7,"RNS.Link.get_rssi",false]],"get_rssi() (rns.packet method)":[[7,"RNS.Packet.get_rssi",false]],"get_rtt() (rns.packetreceipt method)":[[7,"RNS.PacketReceipt.get_rtt",false]],"get_segments() (rns.resource method)":[[7,"RNS.Resource.get_segments",false]],"get_snr() (rns.link method)":[[7,"RNS.Link.get_snr",false]],"get_snr() (rns.packet method)":[[7,"RNS.Packet.get_snr",false]],"get_status() (rns.packetreceipt method)":[[7,"RNS.PacketReceipt.get_status",false]],"get_status() (rns.requestreceipt method)":[[7,"RNS.RequestReceipt.get_status",false]],"get_transfer_size() (rns.resource method)":[[7,"RNS.Resource.get_transfer_size",false]],"has_path() (rns.transport static method)":[[7,"RNS.Transport.has_path",false]],"hash() (rns.destination static method)":[[7,"RNS.Destination.hash",false]],"hash_from_name_and_identity() (rns.destination static method)":[[7,"RNS.Destination.hash_from_name_and_identity",false]],"hops_to() (rns.transport static method)":[[7,"RNS.Transport.hops_to",false]],"identify() (rns.link method)":[[7,"RNS.Link.identify",false]],"identity (class in rns)":[[7,"RNS.Identity",false]],"inactive_for() (rns.link method)":[[7,"RNS.Link.inactive_for",false]],"is_compressed() (rns.resource method)":[[7,"RNS.Resource.is_compressed",false]],"is_ready_to_send() (rns.channel.channel method)":[[7,"RNS.Channel.Channel.is_ready_to_send",false]],"keepalive (rns.link attribute)":[[7,"RNS.Link.KEEPALIVE",false]],"keepalive_timeout_factor (rns.link attribute)":[[7,"RNS.Link.KEEPALIVE_TIMEOUT_FACTOR",false]],"keysize (rns.identity attribute)":[[7,"RNS.Identity.KEYSIZE",false]],"link (class in rns)":[[7,"RNS.Link",false]],"link_mtu_discovery (rns.reticulum attribute)":[[7,"RNS.Reticulum.LINK_MTU_DISCOVERY",false]],"link_mtu_discovery() (rns.reticulum static method)":[[7,"RNS.Reticulum.link_mtu_discovery",false]],"load_private_key() (rns.destination method)":[[7,"RNS.Destination.load_private_key",false]],"load_private_key() (rns.identity method)":[[7,"RNS.Identity.load_private_key",false]],"load_public_key() (rns.identity method)":[[7,"RNS.Identity.load_public_key",false]],"mdu (rns.channel.channel property)":[[7,"RNS.Channel.Channel.mdu",false]],"messagebase (class in rns)":[[7,"RNS.MessageBase",false]],"minimum_bitrate (rns.reticulum attribute)":[[7,"RNS.Reticulum.MINIMUM_BITRATE",false]],"msgtype (rns.messagebase attribute)":[[7,"RNS.MessageBase.MSGTYPE",false]],"mtu (rns.reticulum attribute)":[[7,"RNS.Reticulum.MTU",false]],"next_hop() (rns.transport static method)":[[7,"RNS.Transport.next_hop",false]],"next_hop_interface() (rns.transport static method)":[[7,"RNS.Transport.next_hop_interface",false]],"no_data_for() (rns.link method)":[[7,"RNS.Link.no_data_for",false]],"no_inbound_for() (rns.link method)":[[7,"RNS.Link.no_inbound_for",false]],"no_outbound_for() (rns.link method)":[[7,"RNS.Link.no_outbound_for",false]],"pack() (rns.messagebase method)":[[7,"RNS.MessageBase.pack",false]],"packet (class in rns)":[[7,"RNS.Packet",false]],"packetreceipt (class in rns)":[[7,"RNS.PacketReceipt",false]],"pathfinder_m (rns.transport attribute)":[[7,"RNS.Transport.PATHFINDER_M",false]],"plain_mdu (rns.packet attribute)":[[7,"RNS.Packet.PLAIN_MDU",false]],"ratchet_count (rns.destination attribute)":[[7,"RNS.Destination.RATCHET_COUNT",false]],"ratchet_expiry (rns.identity attribute)":[[7,"RNS.Identity.RATCHET_EXPIRY",false]],"ratchet_interval (rns.destination attribute)":[[7,"RNS.Destination.RATCHET_INTERVAL",false]],"ratchetsize (rns.identity attribute)":[[7,"RNS.Identity.RATCHETSIZE",false]],"rawchannelreader (class in rns)":[[7,"RNS.RawChannelReader",false]],"rawchannelwriter (class in rns)":[[7,"RNS.RawChannelWriter",false]],"recall() (rns.identity static method)":[[7,"RNS.Identity.recall",false]],"recall_app_data() (rns.identity static method)":[[7,"RNS.Identity.recall_app_data",false]],"register_announce_handler() (rns.transport static method)":[[7,"RNS.Transport.register_announce_handler",false]],"register_message_type() (rns.channel.channel method)":[[7,"RNS.Channel.Channel.register_message_type",false]],"register_request_handler() (rns.destination method)":[[7,"RNS.Destination.register_request_handler",false]],"remote_management_enabled() (rns.reticulum static method)":[[7,"RNS.Reticulum.remote_management_enabled",false]],"remove_message_handler() (rns.channel.channel method)":[[7,"RNS.Channel.Channel.remove_message_handler",false]],"remove_ready_callback() (rns.rawchannelreader method)":[[7,"RNS.RawChannelReader.remove_ready_callback",false]],"request() (rns.link method)":[[7,"RNS.Link.request",false]],"request_path() (rns.transport static method)":[[7,"RNS.Transport.request_path",false]],"requestreceipt (class in rns)":[[7,"RNS.RequestReceipt",false]],"resend() (rns.packet method)":[[7,"RNS.Packet.resend",false]],"resource (class in rns)":[[7,"RNS.Resource",false]],"reticulum (class in rns)":[[7,"RNS.Reticulum",false]],"send() (rns.channel.channel method)":[[7,"RNS.Channel.Channel.send",false]],"send() (rns.packet method)":[[7,"RNS.Packet.send",false]],"set_default_app_data() (rns.destination method)":[[7,"RNS.Destination.set_default_app_data",false]],"set_delivery_callback() (rns.packetreceipt method)":[[7,"RNS.PacketReceipt.set_delivery_callback",false]],"set_link_closed_callback() (rns.link method)":[[7,"RNS.Link.set_link_closed_callback",false]],"set_link_established_callback() (rns.destination method)":[[7,"RNS.Destination.set_link_established_callback",false]],"set_packet_callback() (rns.destination method)":[[7,"RNS.Destination.set_packet_callback",false]],"set_packet_callback() (rns.link method)":[[7,"RNS.Link.set_packet_callback",false]],"set_proof_requested_callback() (rns.destination method)":[[7,"RNS.Destination.set_proof_requested_callback",false]],"set_proof_strategy() (rns.destination method)":[[7,"RNS.Destination.set_proof_strategy",false]],"set_ratchet_interval() (rns.destination method)":[[7,"RNS.Destination.set_ratchet_interval",false]],"set_remote_identified_callback() (rns.link method)":[[7,"RNS.Link.set_remote_identified_callback",false]],"set_resource_callback() (rns.link method)":[[7,"RNS.Link.set_resource_callback",false]],"set_resource_concluded_callback() (rns.link method)":[[7,"RNS.Link.set_resource_concluded_callback",false]],"set_resource_started_callback() (rns.link method)":[[7,"RNS.Link.set_resource_started_callback",false]],"set_resource_strategy() (rns.link method)":[[7,"RNS.Link.set_resource_strategy",false]],"set_retained_ratchets() (rns.destination method)":[[7,"RNS.Destination.set_retained_ratchets",false]],"set_timeout() (rns.packetreceipt method)":[[7,"RNS.PacketReceipt.set_timeout",false]],"set_timeout_callback() (rns.packetreceipt method)":[[7,"RNS.PacketReceipt.set_timeout_callback",false]],"should_use_implicit_proof() (rns.reticulum static method)":[[7,"RNS.Reticulum.should_use_implicit_proof",false]],"sign() (rns.destination method)":[[7,"RNS.Destination.sign",false]],"sign() (rns.identity method)":[[7,"RNS.Identity.sign",false]],"stale_grace (rns.link attribute)":[[7,"RNS.Link.STALE_GRACE",false]],"stale_time (rns.link attribute)":[[7,"RNS.Link.STALE_TIME",false]],"teardown() (rns.link method)":[[7,"RNS.Link.teardown",false]],"to_file() (rns.identity method)":[[7,"RNS.Identity.to_file",false]],"track_phy_stats() (rns.link method)":[[7,"RNS.Link.track_phy_stats",false]],"transport (class in rns)":[[7,"RNS.Transport",false]],"transport_enabled() (rns.reticulum static method)":[[7,"RNS.Reticulum.transport_enabled",false]],"truncated_hash() (rns.identity static method)":[[7,"RNS.Identity.truncated_hash",false]],"truncated_hashlength (rns.identity attribute)":[[7,"RNS.Identity.TRUNCATED_HASHLENGTH",false]],"unpack() (rns.messagebase method)":[[7,"RNS.MessageBase.unpack",false]],"validate() (rns.identity method)":[[7,"RNS.Identity.validate",false]]},"objects":{"RNS":[[7,0,1,"","Buffer"],[7,0,1,"","Destination"],[7,0,1,"","Identity"],[7,0,1,"","Link"],[7,0,1,"","MessageBase"],[7,0,1,"","Packet"],[7,0,1,"","PacketReceipt"],[7,0,1,"","RawChannelReader"],[7,0,1,"","RawChannelWriter"],[7,0,1,"","RequestReceipt"],[7,0,1,"","Resource"],[7,0,1,"","Reticulum"],[7,0,1,"","Transport"]],"RNS.Buffer":[[7,1,1,"","create_bidirectional_buffer"],[7,1,1,"","create_reader"],[7,1,1,"","create_writer"]],"RNS.Channel":[[7,0,1,"","Channel"]],"RNS.Channel.Channel":[[7,1,1,"","add_message_handler"],[7,1,1,"","is_ready_to_send"],[7,2,1,"","mdu"],[7,1,1,"","register_message_type"],[7,1,1,"","remove_message_handler"],[7,1,1,"","send"]],"RNS.Destination":[[7,3,1,"","RATCHET_COUNT"],[7,3,1,"","RATCHET_INTERVAL"],[7,1,1,"","accepts_links"],[7,1,1,"","announce"],[7,1,1,"","app_and_aspects_from_name"],[7,1,1,"","clear_default_app_data"],[7,1,1,"","create_keys"],[7,1,1,"","decrypt"],[7,1,1,"","deregister_request_handler"],[7,1,1,"","enable_ratchets"],[7,1,1,"","encrypt"],[7,1,1,"","enforce_ratchets"],[7,1,1,"","expand_name"],[7,1,1,"","get_private_key"],[7,1,1,"","hash"],[7,1,1,"","hash_from_name_and_identity"],[7,1,1,"","load_private_key"],[7,1,1,"","register_request_handler"],[7,1,1,"","set_default_app_data"],[7,1,1,"","set_link_established_callback"],[7,1,1,"","set_packet_callback"],[7,1,1,"","set_proof_requested_callback"],[7,1,1,"","set_proof_strategy"],[7,1,1,"","set_ratchet_interval"],[7,1,1,"","set_retained_ratchets"],[7,1,1,"","sign"]],"RNS.Identity":[[7,3,1,"","CURVE"],[7,3,1,"","KEYSIZE"],[7,3,1,"","RATCHETSIZE"],[7,3,1,"","RATCHET_EXPIRY"],[7,3,1,"","TRUNCATED_HASHLENGTH"],[7,1,1,"","current_ratchet_id"],[7,1,1,"","decrypt"],[7,1,1,"","encrypt"],[7,1,1,"","from_bytes"],[7,1,1,"","from_file"],[7,1,1,"","full_hash"],[7,1,1,"","get_private_key"],[7,1,1,"","get_public_key"],[7,1,1,"","get_random_hash"],[7,1,1,"","load_private_key"],[7,1,1,"","load_public_key"],[7,1,1,"","recall"],[7,1,1,"","recall_app_data"],[7,1,1,"","sign"],[7,1,1,"","to_file"],[7,1,1,"","truncated_hash"],[7,1,1,"","validate"]],"RNS.Link":[[7,3,1,"","CURVE"],[7,3,1,"","ESTABLISHMENT_TIMEOUT_PER_HOP"],[7,3,1,"","KEEPALIVE"],[7,3,1,"","KEEPALIVE_TIMEOUT_FACTOR"],[7,3,1,"","STALE_GRACE"],[7,3,1,"","STALE_TIME"],[7,1,1,"","get_age"],[7,1,1,"","get_channel"],[7,1,1,"","get_establishment_rate"],[7,1,1,"","get_expected_rate"],[7,1,1,"","get_mdu"],[7,1,1,"","get_mode"],[7,1,1,"","get_mtu"],[7,1,1,"","get_q"],[7,1,1,"","get_remote_identity"],[7,1,1,"","get_rssi"],[7,1,1,"","get_snr"],[7,1,1,"","identify"],[7,1,1,"","inactive_for"],[7,1,1,"","no_data_for"],[7,1,1,"","no_inbound_for"],[7,1,1,"","no_outbound_for"],[7,1,1,"","request"],[7,1,1,"","set_link_closed_callback"],[7,1,1,"","set_packet_callback"],[7,1,1,"","set_remote_identified_callback"],[7,1,1,"","set_resource_callback"],[7,1,1,"","set_resource_concluded_callback"],[7,1,1,"","set_resource_started_callback"],[7,1,1,"","set_resource_strategy"],[7,1,1,"","teardown"],[7,1,1,"","track_phy_stats"]],"RNS.MessageBase":[[7,3,1,"","MSGTYPE"],[7,1,1,"","pack"],[7,1,1,"","unpack"]],"RNS.Packet":[[7,3,1,"","ENCRYPTED_MDU"],[7,3,1,"","PLAIN_MDU"],[7,1,1,"","get_q"],[7,1,1,"","get_rssi"],[7,1,1,"","get_snr"],[7,1,1,"","resend"],[7,1,1,"","send"]],"RNS.PacketReceipt":[[7,1,1,"","get_rtt"],[7,1,1,"","get_status"],[7,1,1,"","set_delivery_callback"],[7,1,1,"","set_timeout"],[7,1,1,"","set_timeout_callback"]],"RNS.RawChannelReader":[[7,1,1,"","__init__"],[7,1,1,"","add_ready_callback"],[7,1,1,"","remove_ready_callback"]],"RNS.RawChannelWriter":[[7,1,1,"","__init__"]],"RNS.RequestReceipt":[[7,1,1,"","concluded"],[7,1,1,"","get_progress"],[7,1,1,"","get_request_id"],[7,1,1,"","get_response"],[7,1,1,"","get_response_time"],[7,1,1,"","get_status"]],"RNS.Resource":[[7,1,1,"","advertise"],[7,1,1,"","cancel"],[7,1,1,"","get_data_size"],[7,1,1,"","get_hash"],[7,1,1,"","get_parts"],[7,1,1,"","get_progress"],[7,1,1,"","get_segments"],[7,1,1,"","get_transfer_size"],[7,1,1,"","is_compressed"]],"RNS.Reticulum":[[7,3,1,"","ANNOUNCE_CAP"],[7,3,1,"","LINK_MTU_DISCOVERY"],[7,3,1,"","MINIMUM_BITRATE"],[7,3,1,"","MTU"],[7,1,1,"","get_instance"],[7,1,1,"","link_mtu_discovery"],[7,1,1,"","remote_management_enabled"],[7,1,1,"","should_use_implicit_proof"],[7,1,1,"","transport_enabled"]],"RNS.Transport":[[7,3,1,"","PATHFINDER_M"],[7,1,1,"","deregister_announce_handler"],[7,1,1,"","has_path"],[7,1,1,"","hops_to"],[7,1,1,"","next_hop"],[7,1,1,"","next_hop_interface"],[7,1,1,"","register_announce_handler"],[7,1,1,"","request_path"]]},"objnames":{"0":["py","class","Python class"],"1":["py","method","Python method"],"2":["py","property","Python property"],"3":["py","attribute","Python attribute"]},"objtypes":{"0":"py:class","1":"py:method","2":"py:property","3":"py:attribute"},"terms":{"":[0,2,5,6,9,10,11],"0":[0,2,5,7,9,10,11],"00":[9,10],"00000000":9,"00000100":9,"00000111":9,"01":9,"01010000":9,"02":2,"05":0,"08":[0,10],"0f4259fef4521ab75a3409e353fe9073eb10783b4912a6a9937c57bf44a62c1":10,"0x0101":0,"0x20":0,"0x7d":0,"0x7e":0,"0x91c421ddfb8a30a49a71d63447ddb54cebe3465":8,"0xf000":[0,7],"1":[0,2,5,7,9,10],"10":[5,9,10],"100":[0,5,9],"1000":0,"10000000":9,"1024":0,"11":9,"115":9,"115200":[0,5,10],"12":[2,5,10],"1200":9,"125":5,"125000":5,"127":5,"128":[7,9],"13":10,"13425ec15b621c1d928589718000d814":9,"15":5,"150":[5,10],"150m":5,"16":[5,9,10],"1625":5,"1625000":5,"167":9,"17":10,"1726dbad538775b5bf9b0ea25a4079c8":10,"174a64852a75682259ad8b921b8bf416":2,"18":10,"1800":7,"187":10,"1b03013c25f1c2ca068a4f080b844a10":10,"2":[0,2,5,7,9,10],"20":[5,9,10],"200":[5,10],"201":5,"2023":[2,10],"21":2,"2225fdeecaf6e2db4556c3c2d7637294":10,"23":10,"24":5,"2400000000":5,"25":[0,4,11],"255":[5,10],"25519":7,"256":[5,7,9,10,11],"2592000":7,"27":10,"29":5,"297":[9,11],"29716":5,"2b489d06eaf7c543808c76a5332a447d":10,"2d03725b327348980d570f739a3a5708":10,"2d882c5586e548d79b5af27bca1776dc":10,"2f":0,"2owjajquafianpecac":2,"3":[0,2,5,9,10,11],"30":[5,7,10],"30602def3b3506a28ed33db6f60cc6c9":10,"32":[2,7,9],"3278":5,"33":5,"360":7,"3600":[0,5],"37428":10,"37429":10,"38":10,"383":7,"3b87":5,"4":[7,9,10],"4242":[2,5],"4251":5,"42671":5,"430":9,"4343":5,"44":11,"45":[0,9],"464":7,"465":9,"469":10,"48555":5,"49":10,"49555":5,"4965":10,"4e":5,"4faf1b2e0a077e6a9d92fa051f256038":9,"4ghz":5,"5":[0,5,7,9,10,11],"500":[5,7,9,11],"5001":5,"51":9,"512":[5,7,9,11],"5245a8efe1788c6a1cd36144a270e13b":10,"55":5,"56":10,"564":0,"5757":5,"59":10,"5caf":5,"5d78":5,"5urvjicpzi7q3ybztsef4i5ow2aq4soktfj7zedz53s47r54jnqq":5,"6":[5,7,10],"60":[0,5],"600":5,"63":10,"64":[2,9,10],"7":[2,5,9,10],"71e5":5,"72":5,"720":7,"7200":5,"73":[5,10],"73cbd378bb0286ed11a707c13447bb1":10,"74":10,"781":10,"7a55144adf826958a9529a3bcf08b149":10,"8":[0,5,10],"80":10,"8001":5,"809":10,"83":[9,10],"84fpy1qbxhcgdseepynmhthcrgmx4nffbytz2gkytoqhvvhjp8eaw1z1eedrnkd19b3b8nilcgvxzkv17ummmeescrpya5w":8,"86":10,"865":5,"865600000":5,"867":5,"867200000":5,"868":9,"88":5,"89":5,"8dd57a738226809646089335a6b03695":10,"9":[2,7,10],"900":9,"921600":10,"941bed5e228775e5a8079fc38b1ccf3f":10,"96":9,"9600":0,"984b74a3f768bef236af4371e6f248cd":10,"99":9,"9fb6d773498fb3feda407ed8ef2c3229":10,"A":[0,2,5,6,7,9,10],"And":0,"As":[2,3,5,6,7,9,11],"At":[2,6,9],"Be":[7,10],"But":9,"By":[0,2,5,7,9,10],"For":[2,5,6,7,9,10,11],"IN":[0,7],"If":[0,2,3,5,6,7,9,10,11],"In":[0,2,3,5,6,7,9,10,11],"It":[0,2,3,5,7,9,10,11],"No":[0,2,5,9,10,11],"On":[0,2,5,10],"One":[3,7,9],"Or":[5,10,11],"That":9,"The":[0,2,3,4,5,6,7,11],"Then":[0,2],"There":[2,6,9],"These":[2,5,7,9,10],"To":[0,2,3,5,6,9,10,11],"Will":7,"With":[4,5,6,9,10],"_":9,"__":9,"______":9,"_______":9,"________":9,"________________":9,"__future__":0,"__init__":[0,7],"__main__":0,"__name__":0,"__str__":0,"a4d":5,"a79f":5,"aarch64":2,"ab":0,"abil":[2,3,11],"abl":[0,2,5,6,7,9,10],"abort":0,"about":[0,2,3,5,6,7,9],"abov":[2,3,5,9,10],"absolut":[2,8,11],"abstract":[7,9],"abstractmethod":7,"abund":3,"accept":[7,8,9,10],"accept_al":[0,7],"accept_app":7,"accept_non":7,"accepts_link":7,"access":[2,4,5,6,7,10],"access_point":5,"accommod":[7,9],"accord":[0,2,9],"accordingli":[0,5],"achiev":[5,7,9],"acknowledg":11,"across":[0,3,6,7],"act":[2,7,9,10],"action":0,"activ":[0,2,5,7,9],"actor":9,"actual":[0,2,5,9],"ad":[0,3,4,5,6,7,9,10,11],"adapt":[3,6],"add":[0,2,5,6,7,10],"add_argu":0,"add_message_handl":[0,7],"add_ready_callback":7,"addit":[2,3,5,7,9,10,11],"addition":[2,3,5,9],"addr":10,"address":[0,2,5,6,7,9,10,11],"adher":7,"adjust":[2,7],"admin":5,"administr":10,"adress":[7,9],"advanc":9,"advantag":7,"advers":11,"adversari":2,"advertis":[0,7],"advis":9,"ae":[7,9,11],"af73":5,"affect":[2,5],"after":[0,2,5,6,7,9,10],"again":[2,5,9],"against":9,"agenc":9,"agent":9,"agnost":[6,9],"agnostic":9,"aim":[4,9],"air":3,"airmax":3,"airtim":5,"airtime_limit_long":5,"airtime_limit_short":5,"aliv":[7,9],"all":[0,2,3,4,5,6,7,8,9,10,11],"allevi":3,"alloc":[5,7,9,10],"allow":[0,2,3,5,6,7,9,10,11],"allow_al":[0,7],"allow_list":7,"allow_non":7,"allowed_hash":10,"allowed_ident":10,"allowed_list":7,"almost":[3,5,9,10],"alon":5,"along":[5,6,7,9,10],"alreadi":[0,2,3,6,7,9,10],"also":[0,2,3,4,5,6,7,9,10,11],"alter":[2,7,9],"altern":[0,2,5,10],"although":[2,9,11],"alwai":[2,5,7,9,10],"amateur":[5,11],"amount":[0,5,6,7,9,11],"amsterdam":5,"an":[0,2,3,5,6,7,9,10,11],"analyt":8,"android":[4,5,10],"ani":[0,2,3,5,6,7,8,9,10,11],"annot":0,"annouce_cap":5,"announc":[4,7,10],"announce_cap":[5,7],"announce_handl":0,"announce_packet_hash":7,"announce_rate_grac":5,"announce_rate_penalti":5,"announce_rate_target":5,"announced_ident":[0,7],"announceloop":0,"announcesampl":0,"anonym":[2,6,7,9,11],"anoth":[2,7,9,10],"answer":[9,10],"antenna":3,"anymor":2,"anyon":[0,2,3,5,6,7,9,10],"anyth":[2,3,5,9,10,11],"anywher":[0,5],"ap":5,"api":[2,4,9,11],"apk":2,"app":[0,2,7,9],"app_and_aspects_from_nam":7,"app_data":[0,7],"app_nam":[0,7],"app_timeout":0,"append":[0,9],"appli":[5,7,9],"applic":[0,2,5,6,7,9,10,11],"approach":[3,9,10],"approv":9,"approxim":5,"april":2,"apt":2,"ar":[0,2,3,5,6,7,8,9,10,11],"arbitrari":[7,9,10,11],"arch":2,"architectur":2,"area":[3,5,6,9,11],"arg":0,"argon":0,"argpars":0,"argument":[0,7,10],"argumentpars":0,"arm64":4,"around":[5,9],"arriv":[0,9],"arx":10,"ask":[0,2,3,7],"aspect":[0,3,5,7,9,10],"aspect_filt":[0,7],"assign":[0,9,10],"associ":[2,7,9],"assum":[5,9],"asymmetr":[9,10,11],"attach":10,"attached_interfac":7,"attack":2,"attempt":[0,2,3,7],"attribut":7,"atx":10,"audit":11,"auth":10,"authent":[2,5,6,7,9,10,11],"author":[9,10],"authorit":9,"auto":[2,3,4,7,9],"auto_compress":7,"autoconfigur":11,"autodiscov":5,"autoinstal":[3,10],"autointerfac":[2,3,5,10],"autom":[3,8,9],"automat":[0,2,5,6,7,9,10,11],"autonom":[6,9],"autonomi":11,"avail":[0,2,3,4,5,6,7,9,10,11],"averag":9,"avoid":[3,9,10],"awai":[0,5,6,9,10],"awar":[2,5,9],"ax":[4,11],"ax25kissinterfac":5,"b":[0,6,10],"b32":5,"back":[0,5,9,11],"backbon":[2,3,4],"backboneinterfac":[2,5],"backend":[5,9],"background":[2,5],"backhaul":[3,6],"backup":10,"balanc":5,"band":[3,9],"bandwidth":[2,5,6,7,9,10,11],"bare":[0,5],"barrier":9,"base":[4,5,6,7,9,10,11],"base32":[5,10],"base64":10,"basi":[5,7,9,10,11],"basic":[0,2,4,5,7,10],"baud":[5,10],"baud_flash":10,"baudrat":0,"bc1pgqgu8h8xvj4jtafslq396v7ju7hkgymyrzyqft4llfslz5vp99psqfk3a6":8,"bc7291552be7a58f361522990465165c":10,"beacon":5,"becaus":[6,9],"becki":0,"becom":[0,2,6,7,9],"been":[0,2,3,5,6,7,9,11],"befor":[0,2,5,7,9,10],"begin":[0,3,7],"begun":7,"behalf":5,"behav":3,"behaviour":[2,5,10],"behind":[2,9],"being":[2,5,7,9],"beings":9,"belief":9,"below":[2,3,5],"benefici":[5,10],"best":[2,9,11],"better":[5,9],"between":[0,5,6,7,9,10],"betweenthebord":2,"bi":[7,9],"bidirect":9,"billion":[6,9],"bin":[2,10],"binari":[0,2,7,9,10],"bind":5,"bit":[0,2,5,7,9,10,11],"bitcoin":8,"bitrat":[0,5,7],"ble":5,"blob":[0,9],"block":5,"bluetooth":10,"board":[2,4,5,9,11],"bogu":5,"boil":3,"bookworm":4,"bool":7,"boot":[2,10],"bootstrap":10,"both":[0,2,3,5,6,7,9,10,11],"boundari":5,"box":3,"break":[2,7,9,11],"breviti":10,"bridg":[3,4],"briefli":[3,9],"bring":5,"broad":[2,3],"broadcast":[2,4,5,7,9],"broadcast_destin":0,"broadcastloop":0,"brought":[5,10],"browser":2,"buffer":[4,5,7,11],"bufferedread":7,"bufferedrwpair":7,"bufferedwrit":7,"bufferexampl":0,"bug":11,"build":[0,2,3,4,5,9,11],"built":[2,5,9,10,11],"bundl":0,"bureaucrat":11,"burst":5,"bw":10,"byte":[0,7,9,10,11],"bytes":0,"c":[0,6,10],"c50cc4e4f7838b6c31f60ab9032cbc62":10,"c89b4da064bf66d280f0e4d8abfd9806":10,"cabl":[5,6],"cach":10,"calcul":[7,9,10],"call":[0,6,7,9,11],"callabl":[0,7],"callback":[0,7],"callsign":5,"can":[0,2,3,4,5,6,7,8,9,10],"cancel":7,"candid":6,"cannot":[0,2,5,11],"cap":5,"capabl":[0,9],"capac":[3,5,7,9],"carambola":0,"care":[2,7,11],"carefulli":2,"cargo_build_target":2,"carri":[5,7,9,10,11],"carrier":[6,11],"case":[0,2,3,5,6,9,10],"cat":10,"categori":3,"caution":5,"caveat":4,"cb":[7,9],"cbc":[9,11],"cd":2,"cdma":5,"censor":9,"censorship":[9,11],"central":[3,6,9],"centralis":9,"certain":[0,5,6,8,9],"chain":5,"challeng":9,"chanc":3,"chang":[0,2,5,7,9,10,11],"channel":[2,4,5,6,7,8,9,11],"channelarg":0,"channelexampl":0,"chapter":[2,3,5,6,7,9,10,11],"charact":0,"characterist":9,"cheap":[3,5,9],"cheapli":2,"check":[0,2,7,9,10],"checksum":[7,11],"choic":2,"choos":[0,2,5,9],"chose":9,"chosen":[6,9],"chunk":0,"cific":5,"ciphertext":7,"ciphertext_token":7,"circumst":[8,9],"cl":0,"claim":9,"class":[0,6,7,11],"clear":[0,5,7,9,10],"clear_default_app_data":7,"clear_screen":0,"client":[0,2,3,4,7,10],"client_buffer_readi":0,"client_connect":0,"client_disconnect":0,"client_ident":0,"client_loop":0,"client_message_receiv":0,"client_packet_receiv":0,"client_request":0,"clone":[2,9],"close":[0,6,7,10],"closed_callback":7,"closer":9,"closest":9,"cluster":9,"co":[3,5,11],"code":[2,3,4,5,10],"codingr":5,"collect":8,"com":[0,2,8],"combin":[2,4,6,9],"come":[2,5,9],"comma":5,"command":[0,2,5,10],"comment":[5,10],"common":[0,3,4,6,9,10,11],"commonli":[3,5],"commun":[0,2,4,5,6,7,8,9,10,11],"communica":5,"compat":[0,2,3,5,7,9],"compil":2,"complet":[0,2,3,5,6,7,9,10,11],"complex":[5,9],"compon":[3,8,9],"compos":9,"compress":[0,7,9,10,11],"compromis":9,"comput":[2,5,9,11],"concaten":7,"conceiv":[2,3],"concept":[4,9,10],"conceptu":9,"conclud":[0,7],"concurr":[3,9,10],"condit":[9,11],"conf":2,"config":[0,2,5,6,10],"configarg":0,"configdir":7,"configpath":0,"configur":[0,2,3,4,6,7,9,11],"configuraion":3,"configure_devic":0,"confirm":[9,11],"conflict":2,"confus":[3,9],"congest":9,"conjunct":5,"connect":[0,3,4,6,7,9,10,11],"consequ":9,"conserv":5,"consid":[0,5,7,9,11],"consider":9,"consist":9,"consol":10,"constant":7,"constantli":9,"constrain":7,"construct":[9,11],"constructor":0,"consum":7,"contact":9,"contain":[0,6,7,9,10],"contend":9,"content":[0,2,6,10],"context":9,"contin":0,"continu":[5,7,8,10,11],"contribut":4,"control":[0,2,3,4,6,7,9,11],"convei":0,"conveni":0,"convent":0,"converg":[2,4,9],"coordin":[6,7,9,11],"copi":10,"core":[6,9,10,11],"correct":[0,9],"correctli":0,"correspond":9,"cost":[3,9,11],"could":[0,2,5,6,7,9,11],"count":9,"counter":0,"coupl":2,"cours":[2,5,9],"cover":[2,3,9,11],"coverag":6,"cpu":[0,9],"cpuinfo":10,"cr":10,"creat":[0,4,5,6,7,9,10,11],"create_bidirectional_buff":[0,7],"create_kei":7,"create_read":7,"create_receipt":[0,7],"create_writ":7,"creation":[9,11],"creator":9,"critic":[9,10],"cross":5,"cryptograph":[2,4,6,10,11],"cryptographi":[2,9,11],"ctrl":0,"cull":7,"current":[0,2,4,5,7,9],"current_download":0,"current_filenam":0,"current_ratchet_id":7,"curv":[6,7,9,11],"curve25519":[6,7,9,11],"custom":[3,4,7,9,11],"custom_network_nam":5,"customis":5,"d":[6,10],"daemon":[0,2,5,7,10],"dai":[6,7],"data":[0,2,3,4,5,6,7,9,11],"data_buff":0,"data_port":5,"databit":[0,5,10],"datar":5,"date":[0,2],"datetim":0,"db":[0,10],"dbm":[0,5,10],"debian":[4,9,10],"debug":[2,10],"decad":3,"decentralis":11,"decid":[5,6,7,9],"decis":[5,9],"decod":0,"decreas":10,"decrypt":[7,9,10],"dedic":[5,9],"deep":2,"def":0,"default":[0,2,3,5,6,7,9,10],"default_ifac_s":0,"defin":[0,5,7,9,10],"definit":[0,2,9],"degrad":6,"degre":5,"delai":[2,5,9,10],"delimit":0,"deliv":[0,7],"deliveri":[0,2,7,11],"demand":7,"demonstr":[0,2,5],"depend":[0,3,4,6,7,9,10],"deploi":9,"deregist":7,"deregister_announce_handl":7,"deregister_request_handl":7,"deriv":[2,7,9,11],"describ":[3,5,7,9],"descript":[0,10],"descriptor":0,"deseri":0,"deserializ":0,"design":[2,3,6,9,11],"desir":[0,3,5,9],"desktop":5,"dest_len":0,"destin":[0,2,4,6,7,10],"destination_1":0,"destination_2":0,"destination_clos":0,"destination_hash":[0,7,10],"destination_hexhash":0,"detail":[0,2,4,5,7,10,11],"detect":0,"determin":[2,7,9],"dev":[0,2,5,10],"devel":2,"develop":[3,4,7,8,9,11],"devic":[0,2,4,5,6,7,9,10],"dh":7,"dhcp":[3,5,10],"dict":0,"did":0,"differ":[0,2,3,5,6,7,9,10,11],"diffi":[6,9],"difficult":[2,3],"digit":[2,3,9,11],"dir":0,"dire":3,"direct":[0,2,3,6,7,9,10],"direction":9,"directli":[2,3,5,7,9,10,11],"directori":[0,2,10],"disabl":[5,9,10],"disappear":[5,10],"disassoci":9,"discard":[7,9],"disconnect":[0,5],"discov":[2,5],"discover":5,"discoveri":[5,7,9,10],"discovery_port":5,"discovery_scop":5,"discrimin":6,"discuss":[2,3,9],"disk":[0,7],"displai":[0,9,10],"disrupt":5,"dissolv":6,"distanc":[3,9],"distant":7,"distinct":[5,9],"distinguish":9,"distribut":[0,2,6,7,9,10,11],"disucss":2,"divid":7,"divmod":0,"dn":3,"dnf":2,"do":[0,2,3,5,7,9,10,11],"document":[2,7,9],"doe":[0,2,3,4,5,6,7,9,10],"doesn":5,"domain":[2,5,10],"don":[0,2,6,7,9,10],"donat":4,"done":[0,2,5,6,9,10],"dori":6,"dot":[9,10],"doubt":2,"dowload":2,"down":[0,2,3,5,7],"download":[0,2,5,10],"download_began":0,"download_conclud":0,"download_finish":0,"download_start":0,"download_tim":0,"driver":[10,11],"droid":2,"drop":[5,7,9,10],"dsrdtr":0,"dual":3,"dublin":10,"due":[0,6],"dump":10,"duplex":[9,11],"dynam":[2,10],"dysfunct":8,"e":[0,6,10],"e5c032d3ec4e64a6aca9927ba8ab73336780f6d71790":10,"e702c42ba8":10,"e7536ee90bd4a440e130490b87a25124":10,"each":[0,2,5,6,7,9,10],"earlier":9,"eas":[5,9],"easi":[2,3,5,9,10,11],"easier":[2,5,6,10,11],"easiest":[2,3,5,9],"easili":[2,5,6,9,10,11],"ecdh":[9,11],"echo":[2,4],"echo_destin":0,"echo_request":0,"ed25519":[9,11],"edit":[2,10],"eeprom":10,"effect":5,"effici":[0,2,5,7,9,11],"effort":3,"eg":10,"ei":0,"either":[2,3,6,7,9,10],"elaps":5,"elif":0,"ellipt":[6,7,9,11],"els":[0,2,6,9,11],"embed":3,"emploi":[3,9],"empow":11,"empti":0,"emptor":4,"emul":2,"enabl":[0,2,3,5,6,7,9,10,11],"enable_ratchet":7,"enable_remote_manag":10,"enable_transport":[9,10],"encapsul":[5,11],"encod":[0,7,10],"encrypt":[0,2,6,7,9,10,11],"encrypted_mdu":7,"end":[0,5,6,7,9,11],"endless":5,"endpoint":[0,6,7,9],"energi":2,"enforc":[5,7],"enforce_ratchet":7,"enhanc":9,"enough":[2,3,9],"ensur":[0,5,7,9,10,11],"ensurepath":2,"enter":[0,10],"entir":[0,2,6,7,9,10],"entiti":9,"entri":[0,2,9],"entrypoint":4,"enumer":0,"envelop":7,"environ":[2,6,9],"environment":9,"environmentlogg":9,"eof":5,"ephemer":[6,7,9,11],"epub":4,"equal":[6,7,9],"equip":[5,6,9],"equival":5,"error":[0,2,8,10],"esc":0,"esc_mask":0,"escap":0,"esp32":3,"especi":[2,3,5],"essenti":[2,5,9],"establish":[0,2,5,6,7,11],"established_callback":7,"establishment_timeout_per_hop":7,"etc":10,"eth0":5,"eth1":5,"ethereum":8,"ethernet":[2,4,5,6,9,11],"even":[0,2,5,6,7,9,10,11],"event":5,"eventu":7,"ever":9,"everi":[0,2,5,6,7,9],"everyon":[6,9],"everyth":[0,6,9],"evolv":6,"exact":[3,5,9],"exactli":[7,9],"exampl":[2,3,4,5,7,9,10,11],"example_util":0,"exampleannouncehandl":0,"exampleconfig":[2,10],"exampleinterfac":0,"exce":[0,5,7],"except":[0,5,7],"excess":5,"exchang":[6,7,9,11],"exclud":[7,9],"execstart":10,"execstartpr":10,"execut":[0,2,5,7,10],"exhaust":[3,9],"exist":[0,2,3,5,9,10,11],"exit":[0,2,7,10],"expand":[9,11],"expand_nam":7,"expect":[0,2,5,7,9,10],"expens":3,"experi":[2,9],"experienc":0,"experiment":[2,11],"expir":5,"expiri":[5,7],"explain":[3,7],"explan":[9,10],"explicit":7,"explicitli":10,"explor":[0,9,11],"export":[2,10],"expos":[5,7],"extend":[0,7],"extens":[5,11],"extern":[0,2,5,7,11],"extra":[2,5,6,10],"extract":10,"extrem":[2,9,10,11],"f":[0,2,10],"f4":5,"f53a1c4278e0726bb73fcc623d6ce763":10,"face":[2,5],"facilit":2,"fact":11,"factor":[5,7,10],"fail":[0,2,7],"failed_callback":[0,7],"failur":[2,5,7],"fals":[0,5,7],"far":[6,9],"fashion":8,"fast":[4,5,7,9],"faster":[2,5,9],"fastest":[5,9],"fe80":2,"featur":[2,5,7,8,9,11],"fedora":2,"feed":[2,7],"feedback":[0,4],"feel":2,"fernet":9,"fetch":10,"few":[2,3,5,6,9,10,11],"fewer":7,"ff":10,"fi":8,"fiber":3,"fibr":11,"field":9,"file":[0,2,3,5,6,7,9,10,11],"file_resourc":0,"file_s":0,"filelist":0,"filelist_data":0,"filelist_receiv":0,"filelist_timeout_job":0,"filenam":0,"filetransf":[2,4,7],"filter":[0,6,9,10],"final":[0,7,9],"find":[2,6,9],"find_spec":0,"firewal":[2,5],"firmwar":[2,3,9,10],"firmware_hash":10,"first":[0,2,5,7,9,10],"fit":0,"five":0,"fix":[4,9],"fixed_mtu":5,"flag":[0,2,7,9],"flash":10,"flexibl":[2,3,5,11],"flight":7,"float":[0,7],"flow":[0,5,6],"flow_control":5,"flush":0,"folder":[0,2],"follow":[0,2,3,5,7,8,9,10,11],"forc":[0,10],"forcibli":[7,10],"foreground":2,"foremost":11,"form":[2,5,6,7,9],"format":[0,4,10,11],"forth":0,"forum":2,"forward":[5,7,9,11],"forward_ip":5,"forward_port":5,"found":[0,2,5,6,9,10],"foundat":11,"four":6,"frame":[0,5],"free":[2,6,8,11],"freedom":9,"freedv":3,"freeli":9,"freq":10,"frequenc":[3,5,9,10],"frequent":5,"friendli":2,"from":[0,2,3,5,6,7,9,10,11],"from_byt":7,"from_fil":7,"from_identity_hash":7,"fromhex":0,"fruit":0,"ftdi_ft230x_basic_uart_43891ckm":10,"full":[0,2,5,7,9,10,11],"full_hash":7,"full_nam":[7,10],"fulli":[0,2,3,5,9,10,11],"funcion":7,"function":[0,2,3,4,5,6,7,8,10,11],"fundament":[3,9],"further":[2,4,5],"futur":[6,7,9],"fw":10,"g":[0,10],"ga":0,"gain":[2,3,7,9],"galact":9,"gatekeep":9,"gatewai":[0,2,5,6,9],"gbp":10,"gener":[0,2,3,5,6,7,9,10,11],"generalis":11,"geograph":6,"get":[0,3,4,5,7,10,11],"get_ag":7,"get_channel":[0,7],"get_config_obj":0,"get_data_s":7,"get_establishment_r":7,"get_expected_r":7,"get_hash":7,"get_inst":7,"get_mdu":7,"get_mod":7,"get_mtu":7,"get_packet_rssi":0,"get_packet_snr":0,"get_part":7,"get_private_kei":7,"get_progress":[0,7],"get_public_kei":7,"get_q":7,"get_random_hash":[0,7],"get_remote_ident":[0,7],"get_request_id":7,"get_respons":7,"get_response_tim":7,"get_rssi":7,"get_rtt":[0,7],"get_seg":7,"get_snr":7,"get_statu":7,"get_transfer_s":7,"geti2p":5,"ghz":9,"gi":0,"gigabyt":11,"git":2,"github":[0,2,8],"give":[5,9,10],"given":[5,6,7,9],"global":[0,2,5,6,7,9,11],"glue":3,"go":[0,2,5,9],"goal":[4,5],"goe":2,"good":[2,3,6,9,10],"got":0,"got_respons":0,"govern":9,"grace":7,"gracefulli":5,"grape":0,"graphic":2,"gratefulli":8,"great":9,"greater":[7,9,11],"greatli":[2,5],"group":[5,7,9],"group_id":5,"groupinstal":2,"grow":6,"growth":4,"guarante":[2,9],"guess":5,"guid":[2,3,9],"gw":5,"h":[2,10],"ha":[0,2,3,5,6,7,9,11],"hack":11,"had":9,"half":[9,11],"hand":0,"handheld":9,"handl":[0,2,3,5,6,7,9,10,11],"handler":[0,7],"happen":[0,2,7,9],"hard":3,"hardcod":2,"hardlin":6,"hardwar":[0,2,4,5,6,7,9,10,11],"has_path":[0,7],"hasattr":0,"hash":[0,2,7,9,10],"hash1":9,"hash2":9,"hash_from_name_and_ident":7,"hashlib":9,"hashmap":0,"have":[0,2,3,5,6,7,9,10],"hazard":7,"hdlc":0,"head":2,"header":[0,7,9],"header_1":9,"header_2":9,"hear":9,"heard":[7,9],"held":[5,10],"helium":0,"hellman":[6,9],"help":[0,2,6,8,9,10,11],"helper":0,"her":6,"here":[0,2,5,9,10],"heterogen":11,"hex":[0,10],"hexadecim":[0,9,10],"hexbyt":10,"hidden":10,"hide":2,"hierarch":11,"high":[3,5,9,11],"higher":[6,11],"highest":7,"highli":9,"hill":6,"hint":0,"hit":0,"hkdf":9,"hmac":[9,11],"hoc":11,"hold":[5,7,9],"home":[6,10],"homebrew":5,"hop":[5,6,7,9,10,11],"hops_to":7,"host":[0,4,5,9,10],"hostnam":5,"hour":[0,5],"how":[0,2,3,5,6,9,10,11],"howev":[2,6,9],"http":[0,2,8],"hub":[2,5],"human":[0,7,8,9],"hundr":2,"hungri":3,"hw_mtu":0,"hwrev":10,"hz":10,"i":[0,2,3,4,5,6,7,8,9,10],"i2p":[2,4,11],"i2p_tunnel":5,"i2pd":[2,5],"i2pinterfac":[2,5],"ia":10,"ic":3,"ic_burst_freq":5,"ic_burst_freq_new":5,"ic_burst_hold":5,"ic_burst_penalti":5,"ic_held_release_interv":5,"ic_max_held_announc":5,"ic_new_tim":5,"id":[5,7,9,10],"id_callsign":5,"id_interv":5,"idea":[2,9,10],"ideal":[2,11],"ident":[0,2,4,7,10,11],"identif":[4,5,11],"identifi":[0,5,7,9,10],"identifyexampl":0,"identity_data":10,"ie":10,"if00":10,"ifac":[0,2,9,10],"ifac_s":5,"ifconf":0,"ifconfig":10,"ignor":[5,7,9],"ignored_devic":5,"illustr":[0,5,6,9],"immedi":[2,5,10],"impact":[5,7,9],"implement":[0,5,6,7,8,9,11],"implic":5,"implicit":[7,9],"import":[0,2,3,5,6,7,8,9,10],"importlib":0,"imposs":9,"improv":[2,4,5,8],"in_fram":0,"in_wait":0,"inactive_for":7,"inbound":[0,5,7],"includ":[0,3,4,5,7,9,11],"incom":[0,5,7,10],"incompat":[7,9],"increas":[5,7,10],"incur":5,"independ":[7,9,11],"index":[0,2,4],"indic":[0,7],"indirectli":9,"individu":[5,7,9,11],"inevit":9,"infer":9,"influx":5,"info":[7,9,10],"inform":[0,2,4,5,6,7,9,10],"infrastructur":[2,3,5,6,9,10],"ingo":7,"ingress":[0,5],"ingress_control":5,"init":2,"initi":[0,5,6,7,9,11],"initialis":[0,7,10],"input":[0,10],"insert":9,"insid":9,"inspect":[2,5,6,9,10],"instal":[0,4,5,6,9,10,11],"instanc":[0,4,5,7,9,10],"instance_control_port":10,"instance_nam":10,"instanti":7,"instead":[0,2,5,7,9,10],"instruct":2,"int":[0,7],"integ":[0,7],"integr":[2,6,9],"intend":[2,5,6,9],"intens":10,"intention":9,"inter":7,"inter_byte_timeout":0,"interact":[0,2,7,9,10],"interchang":5,"interconnect":[4,5,9],"interest":[2,9],"interfac":[3,4,6,7,10],"interface_class":0,"interface_en":10,"interfer":10,"intermediari":[5,7,9],"intermitt":5,"intern":[0,5,7,9],"internet":[4,5,9,11],"interoper":[2,3,6,9,11],"interrupt":5,"interv":[5,7,10],"intiat":0,"introduc":[2,9],"introduct":4,"intuit":11,"invalid":[0,7],"invers":9,"investig":6,"invis":[2,5],"involv":6,"io":3,"ioerror":0,"iot":3,"ip":[2,3,5,9,10,11],"ipv4":5,"ipv6":[2,5,10],"is_compress":7,"is_connected_to_shared_inst":0,"is_open":0,"is_path_respons":7,"is_ready_to_send":[0,7],"isdir":0,"isfil":0,"isinst":0,"island":6,"ism":[3,9],"isol":[2,5,10],"isp":5,"issu":[4,5,6,8],"its":[3,5,7,9],"itself":[4,9],"iv":[9,11],"j":10,"jail":10,"job":0,"join":[0,2,6,8,9],"json":10,"just":[0,2,3,5,6,9,11],"k":[0,10],"kb":10,"kbp":10,"keep":[0,6,7,9,10,11],"keepal":[7,9],"keepalive_timeout_factor":7,"kei":[0,4,6,7,10,11],"kept":[5,6,7,9],"kernel":[5,10,11],"keyboardinterrupt":0,"keyerror":7,"keypair":9,"keyset":11,"keysiz":7,"keystor":6,"khz":5,"ki":0,"kill":[7,9],"kind":[3,5,6,9],"kiss":[3,4,10,11],"kiss_fram":5,"kissinterfac":[5,10],"know":[0,2,3,6,7,9],"knowledg":[6,9],"known":[0,5,7,9,10],"ko":8,"krypton":0,"l":[5,10],"lack":9,"laid":9,"lan":5,"larg":[0,3,5,6,7,9,11],"larger":[6,9,10],"laser":5,"last":[0,5,7],"last_read_m":0,"last_unit":0,"latenc":[2,9,11],"later":[0,2,5,10],"latest":[0,2,5,7,10],"latest_buff":0,"latest_client_link":0,"laucnh":2,"launch":[2,10],"layer":[3,5,6,7,9,10,11],"lead":[2,9],"leak":2,"learn":[0,2,8,9],"least":[3,5,9,10,11],"leav":[2,6,9],"ledger":9,"left":[5,7,9,10],"legaci":6,"legal":5,"legisl":5,"len":0,"length":[0,5,7,9],"less":[0,2,3,5,7,9,11],"let":[0,2,5,6,9,10],"level":[3,5,9,10],"liber":3,"liberapai":8,"libffi":2,"librari":2,"licens":9,"light":10,"lightweight":11,"like":[0,2,3,5,6,7,9,10,11],"limit":[0,2,3,4,6,9],"line":[0,2,4,5,6,9,10,11],"linger":10,"link":[2,3,4,5,6,7,10,11],"link_clos":0,"link_establish":0,"link_id":[0,7],"link_mtu_discoveri":7,"linkexampl":0,"linux":[2,3,5,9],"list":[0,2,3,5,7,9,11],"list_deliv":0,"list_fil":0,"list_packet":0,"list_receipt":0,"list_timeout":0,"listdir":0,"listen":[0,4,9,10],"listen_ip":5,"listen_on":[2,5],"listen_port":5,"littl":[3,9],"live":7,"lki":9,"lkr":9,"ll":[0,2,11],"ln":[2,10],"load":[0,2,3,7,10,11],"load_private_kei":7,"load_public_kei":7,"local":[0,2,5,6,7,9,10,11],"locat":[2,5,6,9,10],"log":[0,2,5,10],"log_crit":0,"log_error":0,"log_info":0,"log_verbos":0,"logdest":7,"loginctl":10,"loglevel":[0,7,10],"long":[0,2,3,5,7,9],"longer":[0,2,6,9,10],"longest":5,"look":[0,2,5,9,10],"loop":0,"lora":[2,3,4,9,11],"lorawan":[3,9],"loss":[5,9],"lot":9,"low":[2,3,5,6,9,11],"lower":[0,2,5,10],"ltu":3,"lunar":4,"lxmf":[2,7,10],"m":[0,2,9,10],"mac":[5,9],"machin":[2,9],"maco":4,"made":[2,7,9],"mai":[2,5,7,9,10],"main":0,"mainli":6,"maintain":[2,9],"mainten":9,"make":[0,2,3,5,8,9,10,11],"malici":9,"manag":[2,4,6,7,9,11],"mani":[0,2,3,5,6,7,9,10,11],"manipul":[9,11],"manjaro":2,"manner":6,"manual":[0,2,5,6,7,9,10],"manufactur":[3,5],"mark":[7,9],"markqvist":[0,2,8],"master":[0,7],"match":[0,5,9,10],"matter":[2,5],"max":10,"maximum":[0,5,7,9,10],"mbp":10,"mdu":[0,7],"mean":[3,5,6,7,9,10],"meantim":7,"measur":9,"mechan":[4,5,11],"medium":[0,3,5,6,7,9,11],"member":6,"memori":[2,9],"mention":[5,9],"menu":0,"menu_mod":0,"mesh":[2,5,6,11],"meshchat":4,"messag":[0,2,7,9,10],"message_class":7,"messagebas":[0,4,7],"messagecallbacktyp":7,"messeng":9,"metadata":[2,9],"metavar":0,"meth":0,"method":[0,2,5,7,9],"methodologi":[9,10],"mhz":[5,9],"mi":[0,10],"microcontrol":9,"might":[2,5,6,9,10],"mikrotik":3,"millimet":3,"millisecond":[0,10],"mind":[6,11],"minim":[3,4,9],"minimalsampl":0,"minimum":[0,5,6,7,9],"minimum_bitr":7,"minut":[0,2,5,9],"mirror":10,"mislead":2,"miss":[0,2],"mix":[2,5,6,10],"mixtur":11,"mobil":[5,9],"mode":[0,2,3,4,7,9,10,11],"model":10,"modem":[4,5,6,7,9,11],"moder":5,"modern":3,"modifi":[5,9,10],"modul":[0,2,3,5,9,10,11],"moment":9,"momentarili":5,"monero":8,"monitor":[9,10],"moon":0,"more":[0,2,3,5,6,7,9,10,11],"most":[2,3,5,6,7,9,10],"mostli":[5,6,9],"motiv":4,"move":[2,5,9,10],"msgtype":[0,7],"mtu":[0,5,7,9,11],"much":[2,5,6,9,10,11],"multi":[4,9,10,11],"multicast":5,"multicast_address_typ":5,"multilater":9,"multipl":[0,5,6,9,10],"multiplex":0,"multipoint":9,"must":[0,2,5,6,7,9,10],"mw":5,"my":9,"my_fil":10,"my_ident":10,"mycal":5,"myriad":9,"n":[0,9,10],"name":[0,2,4,5,6,7],"namespac":0,"nano":2,"narg":0,"nat":2,"nativ":0,"natur":5,"nearbi":5,"nears":9,"neccessari":5,"necesarri":5,"necessari":[2,3,5,6,7,9],"necessarili":9,"need":[0,2,3,4,5,6,7,9,10,11],"neg":2,"neglig":9,"neither":[7,9],"neon":0,"neopixel":10,"net":5,"netcat":5,"network":[0,3,5,7,9,10,11],"network_nam":[2,5],"never":[5,7,9],"new":[0,4,6,7,9,10],"new_id":10,"new_ident":10,"newer":[7,9],"newest":9,"newli":[5,6,7,9],"next":[2,6,7,9],"next_hop":7,"next_hop_interfac":7,"nicknam":9,"no1cll":5,"no_data_for":7,"no_inbound_for":7,"no_outbound_for":7,"noauth":10,"nobl":0,"noble_ga":0,"noble_gas":0,"nocheck":10,"node":[2,4,5,6,10,11],"noid":10,"nois":7,"nomad":4,"nomadnet":2,"non":[2,7,9],"none":[0,2,5,7,9,10],"normal":[0,2,5,7,9,10],"notat":[9,10],"note":[0,3,4,5,7,9,10],"noth":[3,11],"notic":[9,10],"notif":[0,7],"now":[0,2,6,9,10],"np":10,"nrf52":3,"nt":0,"num":0,"number":[0,2,5,6,7,9,10],"o":[0,2,5,9,10,11],"object":[0,7],"obscur":2,"obtain":[3,7,9],"obvious":9,"occasion":2,"occur":[0,5,10,11],"ocur":7,"odd":0,"off":[5,9,10,11],"offer":[2,4,5,7,9],"offlin":[0,2],"often":[2,5,6,9,10],"oganesson":0,"old":[0,3,8,9],"older":10,"omit":7,"on_interfac":7,"onc":[0,2,3,5,6,7,9,10,11],"one":[0,2,3,5,6,7,9,10,11],"ones":[5,10],"oneself":9,"onli":[0,2,3,5,6,7,9,10,11],"onlin":[0,10],"onto":[2,9],"open":[0,2,3,5,6,7,8,9,10,11],"open_port":0,"openmodem":[5,11],"openssl":[2,9],"openwrt":4,"oper":[2,3,5,6,7,9,10,11],"opkg":2,"opposit":[0,5],"opt":9,"optic":[3,11],"optim":6,"option":[0,2,3,4,6,7,9,10],"ord":0,"order":[0,7,10],"organ":6,"organis":[5,6,8],"orient":9,"origin":[0,6,9],"os":2,"other":[0,2,3,5,6,7,9,10],"otherwis":[0,7],"our":[0,9],"out":[0,2,3,5,6,7,9,10,11],"outbound":[7,9],"outgo":[0,5,7,9,10],"outli":6,"outlier":6,"outlin":[2,3,9],"output":[5,10],"outsid":[7,11],"over":[0,3,4,5,7,9,10,11],"overal":9,"overcom":9,"overhead":[2,3,5,9],"overlai":2,"overrid":0,"oversight":9,"overview":[4,5,9],"overwhelm":[5,7],"overwrit":10,"own":[0,2,6,7,9,10,11],"owner":0,"p":[0,10],"pack":[0,7],"packag":[0,2,5,9],"packb":0,"packed_s":0,"packet":[0,2,4,5,6,7,10,11],"packet_callback":0,"packet_deliv":0,"packet_hash":0,"packet_receipt":[0,7],"packet_timed_out":0,"packetreceipt":[0,4,7],"pad":[9,11],"page":[2,4,9],"pair":[5,7,9,10],"pamac":2,"panic":[0,10],"panic_on_interface_error":[0,10],"paper":2,"par":[0,2],"parallel":2,"param":0,"paramet":[0,3,5,6,7,9,10],"pariti":[0,5,10],"parity_even":0,"parity_non":0,"parity_odd":0,"pars":0,"parse_arg":0,"parser":0,"part":[0,5,6,7,9,10],"particip":[4,6,9],"particular":[0,3,5,9],"pass":[0,3,5,6,7,9,10],"passphras":[2,5,9],"path":[0,2,3,5,7,9,10],"path_respons":7,"pathfinder_m":7,"pattern":[3,9],"payload":[0,7,9,10],"pdf":4,"peach":0,"peer":[0,2,5,7,9,10],"penalti":5,"pend":[0,9],"peopl":[2,9],"per":[5,7,9,10,11],"percent":[0,5],"percentag":7,"perfectli":2,"perform":[0,2,5,6,7,9,10],"period":[0,5,7,9],"perman":[5,10],"permissionless":9,"persecut":9,"persist":[5,10],"person":[5,9],"perspect":[5,7,9,11],"pet":0,"philosophi":9,"phy":10,"physic":[0,2,3,5,7,9,10,11],"pi":[0,4,6,9,10,11],"pick":9,"piec":9,"ping":[2,10],"pip":[0,2,3,10],"pip3":2,"pipe":[2,4,11],"pipeinterfac":[3,5],"pipx":2,"pitfal":9,"pkcs7":[9,11],"pkg":2,"place":[0,2,5,6,9,10],"plaform":3,"plain":[0,3,5,7,9],"plain_mdu":7,"plaintext":[0,7],"plan":[6,9],"planetari":11,"platform":[0,3,4,9,10],"pleas":[0,2,5,7,10,11],"plenti":9,"plug":10,"pmr":9,"point":[2,3,5,6,9,10],"pointer":2,"pomelo":0,"poorli":6,"popul":7,"popular":11,"port":[0,2,3,4,5,6,9,11],"port0":10,"portabl":[5,9],"pose":[2,9],"posit":[0,10],"posix":2,"possess":9,"possibl":[2,3,5,6,7,9,10,11],"possibli":[2,9],"post":0,"postfix":10,"potenti":[0,2,5,8,9,10,11],"power":[2,3,5,9,10,11],"powershel":2,"ppp":0,"practic":[2,9,11],"pre":[2,7,9],"preambl":[5,10],"preced":0,"precompil":2,"predict":9,"prefer":[2,9],"prefer_ipv6":5,"prepar":[0,6],"prerequisit":7,"presenc":7,"present":5,"preserv":[2,7],"preshar":9,"press":0,"pretend":9,"pretti":9,"prettyhexrep":0,"previou":0,"previous":[5,6,7,9],"primari":9,"primarili":5,"primit":[2,4],"principl":[9,11],"print":[0,5,10],"print_filelist":0,"print_help":0,"print_menu":0,"priorit":9,"prioriti":9,"prioritis":[4,5,6,7],"privaci":11,"privat":[2,5,7,8,9,10,11],"private_ret":2,"privileg":10,"probabl":[0,2,6,9,10,11],"probe":10,"problem":[2,9],"proc":10,"procedur":[2,7,9],"process":[0,2,3,5,7,9],"process_incom":0,"process_outgo":0,"product":10,"program":[0,3,4,5,7,9,11],"program_setup":0,"programm":9,"programmat":9,"progress":[0,7,10,11],"progress_callback":7,"project":2,"prompt":[0,2],"proof":[0,7,9,10],"proof_packet":0,"proof_requested_callback":7,"proof_strategi":7,"propag":[4,5,7],"proper":2,"properti":[0,6,7],"proport":9,"propos":2,"protocol":[2,3,4,5,11],"prove":[0,9],"prove_al":[0,7],"prove_app":7,"prove_non":7,"proven":[7,9],"provid":[0,2,3,4,5,6,7,9,11],"provis":[3,10],"prv_byte":7,"pseudo":10,"pub_byt":7,"public":[0,4,5,7,10],"public_inform":0,"publicli":[2,5],"pull":2,"purchas":[2,6,9,11],"pure":[4,9],"purg":7,"purpos":[2,3,5,7,9,10],"put":[0,3,5,10],"py":[0,2,9,10],"py3":2,"pyca":[2,9],"pyseri":[0,2],"python":[0,4,7,9,10,11],"python3":[0,2,3],"q":[0,10],"qr":2,"qualiti":7,"queri":[0,2,7,10],"question":[2,3,5],"queu":[7,10],"queue":[5,9],"quickli":[8,9,11],"quiet":[5,10],"quinc":0,"quirk":2,"quit":[0,2],"r":[0,5,9,10],"radio":[4,5,6,7,9,10,11],"radon":0,"rais":[0,7],"rak":3,"ram":[2,5],"randint":0,"random":[0,7,9],"random_text_gener":0,"randomis":9,"randomli":[0,9],"rang":[0,2,3,5,6,9,10,11],"rapidli":5,"rare":[2,5],"raspberri":[4,6,9,10,11],"rasperri":2,"ratchet":[7,9],"ratchet_count":7,"ratchet_expiri":7,"ratchet_id_receiv":7,"ratchet_interv":7,"ratchets":7,"ratchets_path":7,"rate":[0,4,7,10],"rather":[2,7],"ratio":7,"raw":[0,3,7],"rawchannelread":[4,7],"rawchannelwrit":[4,7],"rawiobas":7,"rb":0,"re":[0,5,7,9],"reach":[2,4,5,6],"reachabl":[0,2,5,6,7,9,10],"read":[0,2,5,7,9,10],"read_loop":0,"readabl":[0,7,9],"reader":[0,7],"readi":[0,2,3,5,6,7,11],"readili":11,"ready_byt":[0,7],"ready_callback":7,"real":[3,6,11],"realiti":8,"realli":[5,7],"reappear":5,"reason":[2,5,9],"reassembl":9,"reboot":2,"recal":[0,7,10],"recall_app_data":7,"recap":9,"receipt":[0,7,9],"receiv":[0,2,5,7,9,10],"receive_path_respons":7,"receive_stream_id":7,"received_announc":[0,7],"recent":[7,9],"recept":7,"reception_rssi":0,"reception_snr":0,"reception_stat":0,"recip":2,"recipi":9,"recommend":[0,2,5,9],"recondit":10,"reconnect":0,"reconnect_port":0,"reconstruct":9,"record":[2,9],"recoveri":5,"recreat":9,"recurs":[7,9],"redund":2,"refer":[0,2,4],"refresh":10,"regard":9,"regist":[0,7],"register_announce_handl":[0,7],"register_message_typ":[0,7],"register_request_handl":[0,7],"regul":5,"regular":10,"rel":[3,5,9],"relai":2,"relat":2,"releas":[2,5,7,9],"relev":[0,3,5,7,9,10],"reli":[8,9],"reliabl":[3,5,6,7,9,11],"reload":10,"rem":0,"remain":[5,7,9],"rememb":[7,9],"remot":[0,4,7],"remote_ident":[0,7],"remote_identifi":0,"remote_management_allow":10,"remote_management_en":7,"remote_p":0,"remotesensor":9,"remov":[7,10],"remove_message_handl":7,"remove_ready_callback":7,"render":2,"repeat":2,"replac":[0,2,7,9,10],"repli":[0,10],"replic":[3,9],"reply_data":0,"reply_messag":0,"reply_text":0,"report":[5,7,8,10],"repositori":[2,8,9],"repres":9,"represent":[0,7],"request":[2,4,5,7,9,10,11],"request_destin":0,"request_fail":0,"request_id":[0,7],"request_packet":0,"request_path":[0,7],"request_receipt":[0,7],"request_receiv":0,"requested_at":[0,7],"requestexampl":0,"requestor":5,"requestreceipt":[4,7],"requir":[0,2,5,6,7,9,10,11],"require_shared_inst":7,"research":11,"resend":7,"reserv":[0,7],"resid":5,"resili":11,"resolut":2,"resolv":[4,5,9,10],"resourc":[0,2,4,5,7,8],"resource_callback":7,"resource_sending_conclud":0,"resource_strategi":7,"respawn":5,"respawn_delai":5,"respawn_interv":5,"respect":[5,11],"respond":[0,7,10],"respond_to_prob":10,"respons":[4,5,7,9,11],"response_callback":[0,7],"response_gener":[0,7],"rest":[6,11],"restart":10,"restartsec":10,"restor":[2,5],"restrict":[6,10],"result":[0,5,9,10],"retain":[5,7],"retained_ratchet":7,"reticulum":[0,5,6,7],"retransmiss":9,"retransmit":[5,9],"retri":[0,7,9],"retriev":7,"return":[0,7,10],"reveal":[2,7,9,11],"revers":10,"review":[9,11],"revis":10,"rfe":10,"ridicul":9,"right":[5,6],"risc":4,"risk":9,"rn":[0,2,3,7,9,10],"rncp":4,"rnid":4,"rnode":[2,4,9,10,11],"rnodeconf":[3,4],"rnodef3b9":5,"rnodeinterfac":[3,5,10],"rnodemultiinterfac":5,"rnpath":[2,4,5],"rnprobe":[2,4],"rns_bin_dir":10,"rnsd":[2,4],"rnsh":[2,10],"rnspure":[2,9],"rnstatu":[2,4,5,9],"rnstransport":10,"rnx":4,"roadmap":8,"roam":5,"robot":9,"roll":5,"rom":10,"rotat":[7,9,10],"round":[0,7,10],"rout":[2,3,5,6,7,9,10,11],"router":[5,10],"rpc":10,"rpc_kei":10,"rprogress":0,"rssi":[0,7,10],"rtsct":0,"rtt":[0,7,9],"rttstring":0,"rule":[2,4,5],"run":[0,2,3,5,6,7,9,10,11],"runtim":[0,9],"rust":2,"rx":[5,10],"rxb":0,"safe":9,"sai":2,"said":9,"same":[0,2,3,5,6,7,9,10],"satisfi":9,"save":[7,9,10],"save_error":0,"saved_filenam":0,"scalabl":11,"scale":[9,11],"scan":5,"scenario":[2,4,9],"schedul":7,"scheme":3,"scope":5,"scratch":3,"screen":0,"script":[2,3],"scrutini":9,"seamlessli":5,"search":[4,7],"second":[0,5,7,9,10,11],"secreci":[7,9,11],"section":[2,3,5,6,9,10],"secur":[2,9,11],"see":[0,2,5,6,7,9,10,11],"seek":9,"seen":[5,9],"segment":[0,5,6,7,9,11],"select":[0,5],"self":[0,6,11],"semtech":3,"send":[0,5,7,9,10],"send_stream_id":7,"sender":[0,2,6,9,10],"sensibl":[2,3,5],"sensor":9,"sent":[0,2,7,9,10],"sentiment":9,"separ":[0,2,5,6,9,10],"sequenc":[0,7,9,11],"sequenti":11,"seri":3,"serial":[0,2,4,9,11],"serialinterfac":[3,5],"serv":[0,3,5,6,9,10],"serve_path":0,"server":[0,2,3,4,7,10],"server_buffer_readi":0,"server_callback":0,"server_client_connect":0,"server_destin":0,"server_fil":0,"server_ident":0,"server_link":0,"server_loop":0,"server_message_receiv":0,"server_packet_receiv":0,"servic":[2,4,6],"session":[2,9],"set":[0,2,3,5,6,7,9,10,11],"set_default_app_data":7,"set_delivery_callback":[0,7],"set_link_closed_callback":[0,7],"set_link_established_callback":[0,7],"set_packet_callback":[0,7],"set_proof_requested_callback":7,"set_proof_strategi":[0,7],"set_ratchet_interv":7,"set_remote_identified_callback":[0,7],"set_resource_callback":7,"set_resource_concluded_callback":[0,7],"set_resource_started_callback":[0,7],"set_resource_strategi":[0,7],"set_retained_ratchet":7,"set_timeout":[0,7],"set_timeout_callback":[0,7],"setup":[0,2,4,5,10],"sever":[2,6,7,10],"sf":10,"sha":[7,9],"sha256":[9,11],"shall":9,"share":[0,2,6,7,9,10],"share_inst":10,"shared_instance_port":10,"shared_instance_typ":[7,10],"she":6,"shelf":[9,11],"shell":[4,10],"ship":2,"shop":0,"short":[3,5,9,10],"shorter":5,"shorthand":[5,10],"shot":2,"should":[0,2,5,6,7,9,10,11],"should_ingress_limit":0,"should_quit":0,"should_use_implicit_proof":7,"show":[2,10],"shown":0,"side":[5,11],"sideband":4,"sight":6,"sign":[7,9,10],"signal":[0,7,9],"signatur":[7,9,10,11],"significantli":[5,7],"silent":10,"similar":[0,2,3,5,6,7,10,11],"simpl":[0,3,7,9,10,11],"simpler":[5,11],"simplest":[5,9],"simpli":[0,2,3,5,6,9,10],"simplic":9,"simplifi":0,"simplyequip":3,"simultan":[2,9],"sinc":[0,2,5,6,7,9],"singl":[0,5,7,9,10,11],"singular":9,"site":[4,5],"situat":[2,3,5,6,9],"size":[0,2,5,7,9,10],"size_str":0,"skip":0,"sleep":[0,10],"slice":0,"slightli":[0,2],"slottim":[5,10],"slow":[0,5,9],"slower":[5,7,9],"small":[0,2,5,6,7,9,11],"smaller":7,"snippet":2,"snr":[0,7,10],"so":[0,2,3,5,6,7,8,9,10,11],"socket":[5,10,11],"softwar":[2,3,5,9],"solut":[2,9,10],"solv":9,"some":[0,2,3,5,6,7,9,10],"someon":[2,5],"someth":9,"somethign":0,"sometim":[3,5],"somewhat":2,"soon":7,"sort":[5,9,10],"soundmodem":5,"sourc":[0,2,3,6,9,11],"sovereignti":11,"space":[0,2,3,6,9,11],"spam":5,"span":[5,9],"spawn":5,"spe":5,"spec":9,"special":[9,10],"specif":[0,3,4,5,7,10],"specifi":[0,2,3,5,6,7,9,10],"spectrum":[5,9],"speed":[0,5,7,9,10],"split":0,"sponsor":[8,11],"spread":[5,10],"spreadingfactor":5,"squelch":5,"ssh":2,"ssid":5,"stabl":[9,11],"stack":[0,2,6,7,9,10,11],"stage":9,"stai":[0,9,10],"stale":7,"stale_grac":7,"stale_tim":7,"standalon":4,"standard":[3,9],"start":[0,3,4,5,7,9,10],"startup":[0,2,10],"stat":[7,10],"state":0,"static":7,"staticmethod":0,"station":5,"stationari":[6,10],"statist":[0,5,7,8],"statu":[0,2,4,5,7,9,10],"stderr":10,"stdin":[5,10],"stdio":11,"stdout":[0,5,10],"step":[0,2,3],"still":[0,2,5,6,9,10],"stock":0,"stop":[7,11],"stopbit":[0,5,10],"storag":2,"store":[0,7,9,10],"store_tru":0,"str":0,"straightforward":5,"strategi":[5,7],"stream":[0,7,9],"stream_id":[0,7],"strength":[7,11],"strictli":[5,9],"string":[0,7],"stringmessag":0,"strong":9,"struct":0,"structur":[0,7,9,11],"sub":[0,5],"subclass":[0,7],"subinterfac":5,"subject":[2,11],"submit":2,"subnet":[2,6],"subsequ":[0,9],"subset":5,"subsid":5,"succe":2,"succeed":[0,7],"successful":7,"successfulli":[0,7,9],"sudo":[2,10],"suffic":9,"suffici":[2,5,9,10],"suffix":0,"suggest":8,"suit":[2,3,9,10],"suitabl":[0,2,5,6,9,11],"super":0,"suppli":[0,5,6,7,9,11],"supplier":2,"support":[0,2,4,5,6,7,9,10,11],"sure":[0,2,3,10],"surveil":9,"surviv":9,"switch":[3,5,9,10],"sx1262":3,"sx1268":3,"sx1276":3,"sx1278":3,"sx1280":3,"sy":0,"symlink":[2,10],"symmetr":[7,9],"system":[0,2,3,4,5,6,7,8,9,11],"systemctl":10,"systemd":10,"t":[0,2,5,6,7,9,10],"tabl":[2,5,6,9,10],"tag":7,"tail":5,"tailor":9,"take":[0,2,5,9,10,11],"taken":[0,9],"tangerin":0,"tap":3,"target":[0,5,10],"target_hash":7,"target_host":[2,5],"target_port":[2,5],"task":10,"tcp":[2,3,4,6,9,10,11],"tcpclientinterfac":[2,3,5],"tcpinterfac":10,"tcpserverinterfac":[2,5],"tdata":0,"teach":10,"teardown":[0,7],"teardown_reason":0,"teffect":0,"telemetri":8,"tell":[0,5],"temperatur":9,"temporari":5,"temporarili":5,"ten":9,"tend":5,"term":[5,6,9],"termin":[0,2,7],"terminologi":[6,9],"termux":2,"test":[2,9,10],"testnet":[4,10],"text":[0,2,6,9],"tfile":0,"tgz":10,"than":[0,2,5,6,7,9,10,11],"thei":[0,2,5,6,7,9,10],"them":[0,2,3,5,6,8,9,10,11],"themselv":5,"thereaft":9,"therefor":[2,9,11],"thi":[0,2,3,4,5,6,7,9,10,11],"thing":[0,2],"think":[2,3],"thorough":11,"those":[6,9],"though":[2,5,9],"thousand":[2,5,9],"thread":0,"three":[2,6,9],"threshold":5,"throough":5,"throttl":6,"through":[0,2,3,5,6,7,9,10,11],"throughout":9,"throughput":[7,9,11],"thrown":7,"thu":[6,7,9],"ti":[0,9],"time":[0,2,3,5,6,7,9,10],"time_since_last":0,"timeout":[0,7,10],"timeoutarg":0,"timestamp":[0,9],"timestr":0,"tion":5,"tnc":[3,5,7,10,11],"to_fil":7,"todai":9,"togeth":[3,9,10],"token":[7,9,11],"toler":5,"too":[0,6],"tool":[2,3,9,10,11],"top":[6,9],"topic":9,"topographi":[2,6,9],"topologi":[5,9,11],"torn":7,"total":[7,9,11],"total_s":0,"touch":11,"toward":[0,5,9],"track":7,"track_phy_stat":7,"trade":9,"tradit":[6,9],"traffic":[0,2,5,6,7,9,10],"transceiv":[2,3,5,9,11],"transfer":[0,7,9,10,11],"transfer_s":0,"transform":11,"transmiss":[2,5,7,9],"transmit":[0,5,9],"transpar":[3,5,9,10],"transport":[0,2,4,5,6,7,10,11],"transport_en":7,"travers":[7,9],"treat":9,"tri":0,"trip":[0,7,10],"trivial":[9,11],"true":[0,2,5,7,10],"truli":[3,9],"truncat":[7,9,10],"truncated_hash":7,"truncated_hashlength":[0,7],"trust":[9,10],"trustless":[6,9,11],"try":[0,4,5,7],"ttime":0,"ttransfer":0,"ttyacm0":5,"ttyusb0":[0,5,10],"ttyusb1":5,"ttyusb2":5,"tun":[3,5],"tun0":5,"tunnel":[5,9,11],"tupl":7,"turn":[0,5,10],"turnaround":5,"tutori":2,"two":[0,3,5,6,7,9],"tx":[5,10],"txb":0,"txp":10,"txpower":5,"txt":10,"txtail":[5,10],"type":[0,2,4,5,6,7,10],"typeerror":7,"u":[8,9,10],"ubiqu":3,"ubuntu":[4,10],"uci":2,"udp":[4,6,9,10,11],"udpinterfac":5,"uhf":[10,11],"ultim":9,"umsgpack":0,"uncencrypt":0,"uncensor":2,"under":[7,8,10,11],"underli":[0,5,6,7,9,11],"understand":[2,4,7,10],"underwai":2,"unencrypt":[0,7,9],"unequivoc":9,"unexplor":6,"unforg":11,"unfortun":2,"unidentifi":0,"unidirect":0,"unifi":6,"uninterest":0,"uniqu":[0,5,7,9,10,11],"unit":[0,2,7,10],"unknown":[0,5,7,9,10],"unless":[0,2,5,7,9],"unlicens":9,"unlik":9,"unlock":10,"unorganis":6,"unpack":[0,7],"unpackb":0,"unplug":10,"unrecover":[0,10],"unreli":5,"unset":9,"unsupport":7,"until":[0,2,5,7],"unus":10,"unwant":9,"up":[0,2,3,5,6,7,9,10,11],"updat":[0,2,7,9,10],"upgrad":[2,7,9],"upkeep":5,"upon":[0,5,9],"upset":0,"urandom":[9,11],"url":10,"us":[0,3,4,5,6,7,9],"usabl":[5,9],"usag":[2,4,5,7,8,10],"usb":[3,6,9,10],"useabl":9,"user":[0,2,5,6,9,10,11],"user_input":0,"userland":11,"usernameher":10,"usr":10,"usual":2,"utf":0,"util":[0,3,4,5,9],"utilis":[0,2,5,6,7,9,10,11],"v":[4,10],"valid":[0,5,7,9,10],"valu":[0,5,7,9,10],"valuabl":[3,8],"valueerror":[0,7],"vari":[2,5,9,10],"variabl":[0,2,7],"varieti":[5,9,10,11],"variou":[0,2,5,6,9,10,11],"vast":9,"ve":2,"vehicl":5,"vendor":[0,3,11],"verbos":[7,10],"veri":[2,3,5,6,7,8,9,10,11],"verif":[7,9,10],"verifi":[0,2,7,9,10,11],"versa":[6,11],"version":[0,2,7,9,10],"vhf":[6,9,11],"via":[2,3,5,8,9,10,11],"vice":[6,11],"view":[2,5,9,10],"violat":5,"virtual":[2,3,5,6,9,10,11],"visibl":0,"volunt":2,"vport":5,"vvv":2,"w":10,"wa":[0,3,5,6,7,9,10,11],"wai":[0,2,5,6,7,9,10],"wait":[0,5,9,10],"want":[0,2,5,6,9,10,11],"wantedbi":10,"warn":10,"warrant":11,"wast":5,"wave":3,"wb":0,"we":[0,2,3,5,8,9],"weaken":9,"websit":[2,5],"weight":10,"weird":2,"welcom":2,"well":[2,3,5,6,7,9,10,11],"went":0,"were":[0,6],"what":[0,2,4,5,7,9],"whatev":[7,9],"wheel":2,"when":[0,2,3,5,6,7,9,10],"whenev":[0,7,9],"where":[2,3,4,5,6,7,9,10],"whereupon":9,"whether":[0,2,5,7,9],"which":[0,2,5,6,7,9,10],"while":[0,2,3,5,6,7,9,11],"whl":2,"who":[2,5,9],"whole":10,"wide":[2,3,5,9,10,11],"wider":[2,5,9,10],"wifi":[2,4,5,6,9,10,11],"wiki":2,"wildcard":0,"willing":6,"window":[4,5],"wipe":10,"wire":[2,3,4,5,11],"wireless":[3,6],"wirelessli":5,"wish":[0,9,10],"within":[0,2,5,6,7,9],"without":[0,2,3,5,6,9,10,11],"wlan0":5,"wolf":3,"won":0,"word":2,"work":[2,3,5,6,9,10,11],"world":[3,5,6,11],"worri":6,"worth":2,"would":[2,5,6,7,9],"write":[0,2,3,5,7,9,10],"write_timeout":0,"writer":[0,7],"written":[0,9,11],"wrong":[0,5],"wrote":[0,5],"x":[7,9,10],"x25519":[9,11],"xenon":0,"xonxoff":0,"y":0,"ye":[2,5,9,10],"year":9,"yet":[0,5,9,11],"yggdrasil":5,"yi":0,"you":[0,2,3,4,5,6,7,8,9,10,11],"your":[0,2,3,4,5,6,7,8,9,11],"yourself":[2,9,11],"z":0,"zero":[7,11],"zi":0,"zshrc":2},"titles":["Code Examples","An Explanation of Reticulum for Human Beings","Getting Started Fast","Communications Hardware","Reticulum Network Stack Manual","Configuring Interfaces","Building Networks","API Reference","Support Reticulum","Understanding Reticulum","Using Reticulum on Your System","What is Reticulum?"],"titleterms":{"0":3,"1":3,"25":5,"Beings":1,"Of":4,"The":[9,10],"With":2,"access":9,"ad":2,"an":1,"android":2,"announc":[0,5,9],"api":7,"arm64":2,"auto":5,"ax":5,"backbon":5,"base":[2,3],"basic":9,"beam":3,"board":3,"bookworm":2,"bridg":6,"broadcast":0,"buffer":0,"build":6,"can":11,"caveat":11,"channel":0,"client":5,"code":[0,8,9],"combin":3,"common":5,"commun":3,"concept":6,"configur":[5,10],"connect":[2,5],"content":4,"contribut":8,"control":5,"converg":6,"creat":[2,3],"cryptograph":9,"current":11,"custom":[0,2,5],"data":10,"debian":2,"deck":3,"depend":2,"destin":[5,9],"detail":9,"develop":2,"devic":[3,11],"doe":11,"donat":8,"echo":[0,3],"emptor":11,"entrypoint":2,"establish":9,"ethernet":3,"exampl":[0,6],"explan":1,"fast":2,"feedback":8,"filetransf":0,"fix":10,"format":9,"function":9,"further":9,"get":[2,9],"goal":9,"growth":6,"hardwar":3,"heltec":3,"host":2,"human":1,"i":11,"i2p":5,"ident":9,"identif":0,"improv":10,"includ":[2,10],"indic":4,"instal":[2,3],"instanc":2,"interconnect":6,"interfac":[0,2,5,9,11],"internet":[2,6],"introduct":9,"issu":2,"kei":9,"kiss":5,"lilygo":3,"limit":5,"line":3,"link":[0,9],"listen":5,"lora":[5,6],"lora32":3,"lunar":2,"maco":2,"manag":10,"manual":4,"mechan":9,"meshchat":2,"minim":0,"mode":5,"modem":3,"motiv":9,"multi":5,"name":[9,10],"network":[2,4,6],"new":5,"node":9,"nomad":2,"note":2,"offer":11,"opencom":3,"openwrt":2,"option":5,"over":[2,6],"overview":6,"packet":[3,9],"particip":2,"pi":2,"pipe":5,"platform":2,"port":10,"primit":9,"prioritis":9,"program":[2,10],"propag":9,"protocol":9,"provid":8,"public":[2,9],"pure":2,"python":2,"radio":[2,3],"rak4631":3,"raspberri":2,"rate":5,"reach":9,"refer":[7,9],"remot":[2,5,10],"request":0,"resolv":2,"resourc":9,"respons":0,"reticulum":[1,2,3,4,8,9,10,11],"risc":2,"rncp":10,"rnid":10,"rnode":[3,5],"rnodeconf":10,"rnpath":10,"rnprobe":10,"rnsd":10,"rnstatu":10,"rnx":10,"rule":9,"scenario":6,"serial":[3,5,10],"server":5,"servic":10,"setup":9,"shell":2,"sideband":2,"site":6,"specif":[2,9],"stack":4,"standalon":2,"start":2,"statu":11,"support":[3,8],"suprem":3,"system":10,"systemwid":10,"t":3,"t114":3,"t3s3":3,"tabl":4,"tcp":5,"testnet":2,"transport":9,"try":2,"type":[3,9,11],"ubuntu":2,"udp":5,"understand":9,"unsign":3,"us":[2,10,11],"usag":3,"userspac":10,"util":[2,10],"v":2,"v1":3,"v2":3,"v3":3,"v4":3,"what":11,"where":11,"wifi":3,"window":2,"wire":9,"x":3,"xl":3,"your":10}})
\ No newline at end of file
+Search.setIndex({"alltitles":{"API Reference":[[7,null]],"ARM64":[[2,"arm64"]],"AX.25 KISS Interface":[[5,"ax-25-kiss-interface"]],"Adding Radio Interfaces":[[2,"adding-radio-interfaces"]],"An Explanation of Reticulum for Human Beings":[[1,null]],"Android":[[2,"android"]],"Announce":[[0,"announce"]],"Announce Propagation Rules":[[9,"announce-propagation-rules"]],"Announce Rate Control":[[5,"announce-rate-control"]],"Auto Interface":[[5,"auto-interface"]],"Automated List Sourcing":[[10,"automated-list-sourcing"]],"Backbone Interface":[[5,"backbone-interface"]],"Blackhole Management":[[10,"blackhole-management"]],"Bootstrapping Connectivity":[[2,"bootstrapping-connectivity"]],"Broadcast":[[0,"broadcast"]],"Buffer":[[0,"buffer"]],"Building Networks":[[6,null]],"Building Personal Infrastructure":[[2,"building-personal-infrastructure"]],"Caveat Emptor":[[11,"caveat-emptor"]],"Channel":[[0,"channel"]],"Code Examples":[[0,null]],"Combining Hardware Types":[[3,"combining-hardware-types"]],"Common Interface Options":[[5,"common-interface-options"]],"Communications Hardware":[[3,null]],"Concepts & Overview":[[6,"concepts-overview"]],"Conceptual Overview":[[9,"conceptual-overview"]],"Configuration & Data":[[10,"configuration-data"]],"Configuring Interfaces":[[5,null]],"Connect to the Public Testnet":[[2,"connect-to-the-public-testnet"]],"Connecting Remotes":[[5,"connecting-remotes"]],"Connecting Reticulum Instances Over the Internet":[[2,"connecting-reticulum-instances-over-the-internet"]],"Contribute Code":[[8,"contribute-code"]],"Contributing to the Global Ret":[[2,"contributing-to-the-global-ret"]],"Creating RNodes":[[3,"creating-rnodes"]],"Creating a Network With Reticulum":[[2,"creating-a-network-with-reticulum"]],"Creating and Using Custom Interfaces":[[2,"creating-and-using-custom-interfaces"]],"Creating and Using a Network Identity":[[9,"creating-and-using-a-network-identity"]],"Cryptographic Primitives":[[9,"cryptographic-primitives"]],"Current Status":[[11,"current-status"]],"Current Usage":[[9,"current-usage"]],"Custom Interfaces":[[0,"custom-interfaces"],[5,"custom-interfaces"]],"Debian Bookworm":[[2,"debian-bookworm"]],"Destination Naming":[[9,"destination-naming"]],"Destinations":[[9,"destinations"]],"Destinations, Not Addresses":[[6,"destinations-not-addresses"]],"Develop a Program with Reticulum":[[2,"develop-a-program-with-reticulum"]],"Discoverable Interfaces":[[5,"discoverable-interfaces"]],"Discovering Interfaces":[[10,"discovering-interfaces"]],"Discovery Parameters":[[5,"discovery-parameters"]],"Donations":[[8,"donations"]],"Echo":[[0,"echo"]],"Enabling Discovery":[[5,"enabling-discovery"]],"Ethernet-based Hardware":[[3,"ethernet-based-hardware"]],"Example Configuration":[[5,"example-configuration"]],"Filetransfer":[[0,"filetransfer"]],"Finding Your Way":[[2,"finding-your-way"]],"Fixed Serial Port Names":[[10,"fixed-serial-port-names"]],"Future Implications":[[9,"future-implications"]],"Getting Further":[[9,"getting-further"]],"Getting Started Fast":[[2,null]],"Goals":[[9,"goals"]],"Heltec LoRa32 v2.0":[[3,"heltec-lora32-v2-0"]],"Heltec LoRa32 v3.0":[[3,"heltec-lora32-v3-0"]],"Heltec LoRa32 v4.0":[[3,"heltec-lora32-v4-0"]],"Heltec T114":[[3,"heltec-t114"]],"Heterogeneous Connectivity":[[6,"heterogeneous-connectivity"]],"Hosting Public Entrypoints":[[2,"hosting-public-entrypoints"]],"I2P Interface":[[5,"i2p-interface"]],"Identification":[[0,"example-identify"]],"Identities":[[9,"understanding-identities"]],"Improving System Configuration":[[10,"improving-system-configuration"]],"Included Utility Programs":[[10,"included-utility-programs"]],"Indices and Tables":[[4,"indices-and-tables"]],"Installation":[[3,"installation"]],"Interface Access Codes":[[9,"interface-access-codes"]],"Interface Modes":[[5,"interface-modes"],[5,"interfaces-modes"]],"Interface Types and Devices":[[11,"interface-types-and-devices"]],"Introduction & Basic Functionality":[[9,"introduction-basic-functionality"]],"Introductory Considerations":[[6,"introductory-considerations"]],"KISS Interface":[[5,"kiss-interface"]],"LilyGO LoRa32 v1.0":[[3,"lilygo-lora32-v1-0"]],"LilyGO LoRa32 v2.0":[[3,"lilygo-lora32-v2-0"]],"LilyGO LoRa32 v2.1":[[3,"lilygo-lora32-v2-1"]],"LilyGO T-Beam":[[3,"lilygo-t-beam"]],"LilyGO T-Beam Supreme":[[3,"lilygo-t-beam-supreme"]],"LilyGO T-Deck":[[3,"lilygo-t-deck"]],"LilyGO T-Echo":[[3,"lilygo-t-echo"]],"LilyGO T3S3":[[3,"lilygo-t3s3"]],"Link":[[0,"link"]],"Link Establishment in Detail":[[9,"link-establishment-in-detail"]],"Listeners":[[5,"listeners"]],"Local Blackhole Management":[[10,"local-blackhole-management"]],"MacOS":[[2,"macos"]],"MeshChat":[[2,"meshchat"]],"Minimal":[[0,"minimal"]],"Mixing Strategies":[[2,"mixing-strategies"]],"Motivation":[[9,"motivation"]],"Network Health & Responsibility":[[2,"network-health-responsibility"]],"Network Identities":[[9,"network-identities"]],"New Destination Rate Limiting":[[5,"new-destination-rate-limiting"]],"Node Types":[[9,"node-types"]],"Nomad Network":[[2,"nomad-network"]],"OpenCom XL":[[3,"opencom-xl"]],"OpenWRT":[[2,"openwrt"]],"Packet Prioritisation":[[9,"packet-prioritisation"]],"Packet Radio Modems":[[3,"packet-radio-modems"]],"Pipe Interface":[[5,"pipe-interface"]],"Platform-Specific Install Notes":[[2,"platform-specific-install-notes"]],"Protocol Specifics":[[9,"protocol-specifics"]],"Provide Feedback":[[8,"provide-feedback"]],"Public Key Announcements":[[9,"public-key-announcements"]],"Publishing Blackhole Lists":[[10,"publishing-blackhole-lists"]],"Pure-Python Reticulum":[[2,"pure-python-reticulum"]],"RAK4631-based Boards":[[3,"rak4631-based-boards"]],"RISC-V":[[2,"risc-v"]],"RNode":[[3,"rnode"]],"RNode LoRa Interface":[[5,"rnode-lora-interface"]],"RNode Multi Interface":[[5,"rnode-multi-interface"]],"Raspberry Pi":[[2,"raspberry-pi"]],"Reaching the Destination":[[9,"reaching-the-destination"]],"Reference Setup":[[9,"reference-setup"]],"Remote Management":[[10,"remote-management"]],"Remote Shell":[[2,"remote-shell"]],"Requests & Responses":[[0,"requests-responses"]],"Resolving Dependency & Installation Issues":[[2,"resolving-dependency-installation-issues"]],"Resources":[[9,"resources"]],"Reticulum Network Stack Manual":[[4,null]],"Reticulum Transport":[[9,"reticulum-transport"]],"Reticulum as a System Service":[[10,"reticulum-as-a-system-service"]],"Security Considerations":[[5,"security-considerations"]],"Serial Interface":[[5,"serial-interface"]],"Serial Lines & Devices":[[3,"serial-lines-devices"]],"Sideband":[[2,"sideband"]],"Standalone Reticulum Installation":[[2,"standalone-reticulum-installation"]],"Support Reticulum":[[8,null]],"Supported Boards and Devices":[[3,"supported-boards-and-devices"]],"Systemwide Service":[[10,"systemwide-service"]],"TCP Client Interface":[[5,"tcp-client-interface"]],"TCP Server Interface":[[5,"tcp-server-interface"]],"Table Of Contents":[[4,"table-of-contents"]],"The Announce Mechanism in Detail":[[9,"the-announce-mechanism-in-detail"]],"The rncp Utility":[[10,"the-rncp-utility"]],"The rnid Utility":[[10,"the-rnid-utility"]],"The rnodeconf Utility":[[10,"the-rnodeconf-utility"]],"The rnpath Utility":[[10,"the-rnpath-utility"]],"The rnprobe Utility":[[10,"the-rnprobe-utility"]],"The rnsd Utility":[[10,"the-rnsd-utility"]],"The rnstatus Utility":[[10,"the-rnstatus-utility"]],"The rnx Utility":[[10,"the-rnx-utility"]],"Transport Nodes and Instances":[[6,"transport-nodes-and-instances"]],"Trustless Networking":[[6,"trustless-networking"]],"Try Using a Reticulum-based Program":[[2,"try-using-a-reticulum-based-program"]],"UDP Interface":[[5,"udp-interface"]],"Ubuntu Lunar":[[2,"ubuntu-lunar"]],"Understanding Reticulum":[[9,null]],"Unsigned RNode v2.x":[[3,"unsigned-rnode-v2-x"]],"Usage with Reticulum":[[3,"usage-with-reticulum"]],"Userspace Service":[[10,"userspace-service"]],"Using Reticulum on Your System":[[10,null]],"Using the Included Utilities":[[2,"using-the-included-utilities"]],"What does Reticulum Offer?":[[11,"what-does-reticulum-offer"]],"What is Reticulum?":[[11,null]],"Where can Reticulum be Used?":[[11,"where-can-reticulum-be-used"]],"WiFi-based Hardware":[[3,"wifi-based-hardware"]],"Windows":[[2,"windows"]],"Wire Format":[[9,"wire-format"]]},"docnames":["examples","forhumans","gettingstartedfast","hardware","index","interfaces","networks","reference","support","understanding","using","whatis"],"envversion":{"sphinx":65,"sphinx.domains.c":3,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":9,"sphinx.domains.index":1,"sphinx.domains.javascript":3,"sphinx.domains.math":2,"sphinx.domains.python":4,"sphinx.domains.rst":2,"sphinx.domains.std":2},"filenames":["examples.rst","forhumans.rst","gettingstartedfast.rst","hardware.rst","index.rst","interfaces.rst","networks.rst","reference.rst","support.rst","understanding.rst","using.rst","whatis.rst"],"indexentries":{"__init__() (rns.rawchannelreader method)":[[7,"RNS.RawChannelReader.__init__",false]],"__init__() (rns.rawchannelwriter method)":[[7,"RNS.RawChannelWriter.__init__",false]],"accepts_links() (rns.destination method)":[[7,"RNS.Destination.accepts_links",false]],"add_message_handler() (rns.channel.channel method)":[[7,"RNS.Channel.Channel.add_message_handler",false]],"add_ready_callback() (rns.rawchannelreader method)":[[7,"RNS.RawChannelReader.add_ready_callback",false]],"advertise() (rns.resource method)":[[7,"RNS.Resource.advertise",false]],"announce() (rns.destination method)":[[7,"RNS.Destination.announce",false]],"announce_cap (rns.reticulum attribute)":[[7,"RNS.Reticulum.ANNOUNCE_CAP",false]],"app_and_aspects_from_name() (rns.destination static method)":[[7,"RNS.Destination.app_and_aspects_from_name",false]],"await_path() (rns.transport static method)":[[7,"RNS.Transport.await_path",false]],"blackhole_sources() (rns.reticulum static method)":[[7,"RNS.Reticulum.blackhole_sources",false]],"buffer (class in rns)":[[7,"RNS.Buffer",false]],"cancel() (rns.resource method)":[[7,"RNS.Resource.cancel",false]],"channel (class in rns.channel)":[[7,"RNS.Channel.Channel",false]],"clear_default_app_data() (rns.destination method)":[[7,"RNS.Destination.clear_default_app_data",false]],"concluded() (rns.requestreceipt method)":[[7,"RNS.RequestReceipt.concluded",false]],"create_bidirectional_buffer() (rns.buffer static method)":[[7,"RNS.Buffer.create_bidirectional_buffer",false]],"create_keys() (rns.destination method)":[[7,"RNS.Destination.create_keys",false]],"create_reader() (rns.buffer static method)":[[7,"RNS.Buffer.create_reader",false]],"create_writer() (rns.buffer static method)":[[7,"RNS.Buffer.create_writer",false]],"current_ratchet_id() (rns.identity static method)":[[7,"RNS.Identity.current_ratchet_id",false]],"curve (rns.identity attribute)":[[7,"RNS.Identity.CURVE",false]],"curve (rns.link attribute)":[[7,"RNS.Link.CURVE",false]],"decrypt() (rns.destination method)":[[7,"RNS.Destination.decrypt",false]],"decrypt() (rns.identity method)":[[7,"RNS.Identity.decrypt",false]],"deregister_announce_handler() (rns.transport static method)":[[7,"RNS.Transport.deregister_announce_handler",false]],"deregister_request_handler() (rns.destination method)":[[7,"RNS.Destination.deregister_request_handler",false]],"destination (class in rns)":[[7,"RNS.Destination",false]],"enable_ratchets() (rns.destination method)":[[7,"RNS.Destination.enable_ratchets",false]],"encrypt() (rns.destination method)":[[7,"RNS.Destination.encrypt",false]],"encrypt() (rns.identity method)":[[7,"RNS.Identity.encrypt",false]],"encrypted_mdu (rns.packet attribute)":[[7,"RNS.Packet.ENCRYPTED_MDU",false]],"enforce_ratchets() (rns.destination method)":[[7,"RNS.Destination.enforce_ratchets",false]],"establishment_timeout_per_hop (rns.link attribute)":[[7,"RNS.Link.ESTABLISHMENT_TIMEOUT_PER_HOP",false]],"expand_name() (rns.destination static method)":[[7,"RNS.Destination.expand_name",false]],"from_bytes() (rns.identity static method)":[[7,"RNS.Identity.from_bytes",false]],"from_file() (rns.identity static method)":[[7,"RNS.Identity.from_file",false]],"full_hash() (rns.identity static method)":[[7,"RNS.Identity.full_hash",false]],"get_age() (rns.link method)":[[7,"RNS.Link.get_age",false]],"get_channel() (rns.link method)":[[7,"RNS.Link.get_channel",false]],"get_data_size() (rns.resource method)":[[7,"RNS.Resource.get_data_size",false]],"get_establishment_rate() (rns.link method)":[[7,"RNS.Link.get_establishment_rate",false]],"get_expected_rate() (rns.link method)":[[7,"RNS.Link.get_expected_rate",false]],"get_hash() (rns.resource method)":[[7,"RNS.Resource.get_hash",false]],"get_instance() (rns.reticulum static method)":[[7,"RNS.Reticulum.get_instance",false]],"get_mdu() (rns.link method)":[[7,"RNS.Link.get_mdu",false]],"get_mode() (rns.link method)":[[7,"RNS.Link.get_mode",false]],"get_mtu() (rns.link method)":[[7,"RNS.Link.get_mtu",false]],"get_parts() (rns.resource method)":[[7,"RNS.Resource.get_parts",false]],"get_private_key() (rns.destination method)":[[7,"RNS.Destination.get_private_key",false]],"get_private_key() (rns.identity method)":[[7,"RNS.Identity.get_private_key",false]],"get_progress() (rns.requestreceipt method)":[[7,"RNS.RequestReceipt.get_progress",false]],"get_progress() (rns.resource method)":[[7,"RNS.Resource.get_progress",false]],"get_public_key() (rns.identity method)":[[7,"RNS.Identity.get_public_key",false]],"get_q() (rns.link method)":[[7,"RNS.Link.get_q",false]],"get_q() (rns.packet method)":[[7,"RNS.Packet.get_q",false]],"get_random_hash() (rns.identity static method)":[[7,"RNS.Identity.get_random_hash",false]],"get_remote_identity() (rns.link method)":[[7,"RNS.Link.get_remote_identity",false]],"get_request_id() (rns.requestreceipt method)":[[7,"RNS.RequestReceipt.get_request_id",false]],"get_response() (rns.requestreceipt method)":[[7,"RNS.RequestReceipt.get_response",false]],"get_response_time() (rns.requestreceipt method)":[[7,"RNS.RequestReceipt.get_response_time",false]],"get_rssi() (rns.link method)":[[7,"RNS.Link.get_rssi",false]],"get_rssi() (rns.packet method)":[[7,"RNS.Packet.get_rssi",false]],"get_rtt() (rns.packetreceipt method)":[[7,"RNS.PacketReceipt.get_rtt",false]],"get_segments() (rns.resource method)":[[7,"RNS.Resource.get_segments",false]],"get_snr() (rns.link method)":[[7,"RNS.Link.get_snr",false]],"get_snr() (rns.packet method)":[[7,"RNS.Packet.get_snr",false]],"get_status() (rns.packetreceipt method)":[[7,"RNS.PacketReceipt.get_status",false]],"get_status() (rns.requestreceipt method)":[[7,"RNS.RequestReceipt.get_status",false]],"get_transfer_size() (rns.resource method)":[[7,"RNS.Resource.get_transfer_size",false]],"has_path() (rns.transport static method)":[[7,"RNS.Transport.has_path",false]],"hash() (rns.destination static method)":[[7,"RNS.Destination.hash",false]],"hash_from_name_and_identity() (rns.destination static method)":[[7,"RNS.Destination.hash_from_name_and_identity",false]],"hops_to() (rns.transport static method)":[[7,"RNS.Transport.hops_to",false]],"identify() (rns.link method)":[[7,"RNS.Link.identify",false]],"identity (class in rns)":[[7,"RNS.Identity",false]],"inactive_for() (rns.link method)":[[7,"RNS.Link.inactive_for",false]],"interface_discovery_sources() (rns.reticulum static method)":[[7,"RNS.Reticulum.interface_discovery_sources",false]],"is_compressed() (rns.resource method)":[[7,"RNS.Resource.is_compressed",false]],"is_ready_to_send() (rns.channel.channel method)":[[7,"RNS.Channel.Channel.is_ready_to_send",false]],"keepalive (rns.link attribute)":[[7,"RNS.Link.KEEPALIVE",false]],"keepalive_timeout_factor (rns.link attribute)":[[7,"RNS.Link.KEEPALIVE_TIMEOUT_FACTOR",false]],"keysize (rns.identity attribute)":[[7,"RNS.Identity.KEYSIZE",false]],"link (class in rns)":[[7,"RNS.Link",false]],"link_mtu_discovery (rns.reticulum attribute)":[[7,"RNS.Reticulum.LINK_MTU_DISCOVERY",false]],"link_mtu_discovery() (rns.reticulum static method)":[[7,"RNS.Reticulum.link_mtu_discovery",false]],"load_private_key() (rns.destination method)":[[7,"RNS.Destination.load_private_key",false]],"load_private_key() (rns.identity method)":[[7,"RNS.Identity.load_private_key",false]],"load_public_key() (rns.identity method)":[[7,"RNS.Identity.load_public_key",false]],"mdu (rns.channel.channel property)":[[7,"RNS.Channel.Channel.mdu",false]],"messagebase (class in rns)":[[7,"RNS.MessageBase",false]],"minimum_bitrate (rns.reticulum attribute)":[[7,"RNS.Reticulum.MINIMUM_BITRATE",false]],"msgtype (rns.messagebase attribute)":[[7,"RNS.MessageBase.MSGTYPE",false]],"mtu (rns.reticulum attribute)":[[7,"RNS.Reticulum.MTU",false]],"next_hop() (rns.transport static method)":[[7,"RNS.Transport.next_hop",false]],"next_hop_interface() (rns.transport static method)":[[7,"RNS.Transport.next_hop_interface",false]],"no_data_for() (rns.link method)":[[7,"RNS.Link.no_data_for",false]],"no_inbound_for() (rns.link method)":[[7,"RNS.Link.no_inbound_for",false]],"no_outbound_for() (rns.link method)":[[7,"RNS.Link.no_outbound_for",false]],"pack() (rns.messagebase method)":[[7,"RNS.MessageBase.pack",false]],"packet (class in rns)":[[7,"RNS.Packet",false]],"packetreceipt (class in rns)":[[7,"RNS.PacketReceipt",false]],"pathfinder_m (rns.transport attribute)":[[7,"RNS.Transport.PATHFINDER_M",false]],"plain_mdu (rns.packet attribute)":[[7,"RNS.Packet.PLAIN_MDU",false]],"publish_blackhole_enabled() (rns.reticulum static method)":[[7,"RNS.Reticulum.publish_blackhole_enabled",false]],"ratchet_count (rns.destination attribute)":[[7,"RNS.Destination.RATCHET_COUNT",false]],"ratchet_expiry (rns.identity attribute)":[[7,"RNS.Identity.RATCHET_EXPIRY",false]],"ratchet_interval (rns.destination attribute)":[[7,"RNS.Destination.RATCHET_INTERVAL",false]],"ratchetsize (rns.identity attribute)":[[7,"RNS.Identity.RATCHETSIZE",false]],"rawchannelreader (class in rns)":[[7,"RNS.RawChannelReader",false]],"rawchannelwriter (class in rns)":[[7,"RNS.RawChannelWriter",false]],"recall() (rns.identity static method)":[[7,"RNS.Identity.recall",false]],"recall_app_data() (rns.identity static method)":[[7,"RNS.Identity.recall_app_data",false]],"register_announce_handler() (rns.transport static method)":[[7,"RNS.Transport.register_announce_handler",false]],"register_message_type() (rns.channel.channel method)":[[7,"RNS.Channel.Channel.register_message_type",false]],"register_request_handler() (rns.destination method)":[[7,"RNS.Destination.register_request_handler",false]],"remote_management_enabled() (rns.reticulum static method)":[[7,"RNS.Reticulum.remote_management_enabled",false]],"remove_message_handler() (rns.channel.channel method)":[[7,"RNS.Channel.Channel.remove_message_handler",false]],"remove_ready_callback() (rns.rawchannelreader method)":[[7,"RNS.RawChannelReader.remove_ready_callback",false]],"request() (rns.link method)":[[7,"RNS.Link.request",false]],"request_path() (rns.transport static method)":[[7,"RNS.Transport.request_path",false]],"requestreceipt (class in rns)":[[7,"RNS.RequestReceipt",false]],"required_discovery_value() (rns.reticulum static method)":[[7,"RNS.Reticulum.required_discovery_value",false]],"resend() (rns.packet method)":[[7,"RNS.Packet.resend",false]],"resource (class in rns)":[[7,"RNS.Resource",false]],"reticulum (class in rns)":[[7,"RNS.Reticulum",false]],"send() (rns.channel.channel method)":[[7,"RNS.Channel.Channel.send",false]],"send() (rns.packet method)":[[7,"RNS.Packet.send",false]],"set_default_app_data() (rns.destination method)":[[7,"RNS.Destination.set_default_app_data",false]],"set_delivery_callback() (rns.packetreceipt method)":[[7,"RNS.PacketReceipt.set_delivery_callback",false]],"set_link_closed_callback() (rns.link method)":[[7,"RNS.Link.set_link_closed_callback",false]],"set_link_established_callback() (rns.destination method)":[[7,"RNS.Destination.set_link_established_callback",false]],"set_packet_callback() (rns.destination method)":[[7,"RNS.Destination.set_packet_callback",false]],"set_packet_callback() (rns.link method)":[[7,"RNS.Link.set_packet_callback",false]],"set_proof_requested_callback() (rns.destination method)":[[7,"RNS.Destination.set_proof_requested_callback",false]],"set_proof_strategy() (rns.destination method)":[[7,"RNS.Destination.set_proof_strategy",false]],"set_ratchet_interval() (rns.destination method)":[[7,"RNS.Destination.set_ratchet_interval",false]],"set_remote_identified_callback() (rns.link method)":[[7,"RNS.Link.set_remote_identified_callback",false]],"set_resource_callback() (rns.link method)":[[7,"RNS.Link.set_resource_callback",false]],"set_resource_concluded_callback() (rns.link method)":[[7,"RNS.Link.set_resource_concluded_callback",false]],"set_resource_started_callback() (rns.link method)":[[7,"RNS.Link.set_resource_started_callback",false]],"set_resource_strategy() (rns.link method)":[[7,"RNS.Link.set_resource_strategy",false]],"set_retained_ratchets() (rns.destination method)":[[7,"RNS.Destination.set_retained_ratchets",false]],"set_timeout() (rns.packetreceipt method)":[[7,"RNS.PacketReceipt.set_timeout",false]],"set_timeout_callback() (rns.packetreceipt method)":[[7,"RNS.PacketReceipt.set_timeout_callback",false]],"should_use_implicit_proof() (rns.reticulum static method)":[[7,"RNS.Reticulum.should_use_implicit_proof",false]],"sign() (rns.destination method)":[[7,"RNS.Destination.sign",false]],"sign() (rns.identity method)":[[7,"RNS.Identity.sign",false]],"stale_grace (rns.link attribute)":[[7,"RNS.Link.STALE_GRACE",false]],"stale_time (rns.link attribute)":[[7,"RNS.Link.STALE_TIME",false]],"teardown() (rns.link method)":[[7,"RNS.Link.teardown",false]],"to_file() (rns.identity method)":[[7,"RNS.Identity.to_file",false]],"track_phy_stats() (rns.link method)":[[7,"RNS.Link.track_phy_stats",false]],"transport (class in rns)":[[7,"RNS.Transport",false]],"transport_enabled() (rns.reticulum static method)":[[7,"RNS.Reticulum.transport_enabled",false]],"truncated_hash() (rns.identity static method)":[[7,"RNS.Identity.truncated_hash",false]],"truncated_hashlength (rns.identity attribute)":[[7,"RNS.Identity.TRUNCATED_HASHLENGTH",false]],"unpack() (rns.messagebase method)":[[7,"RNS.MessageBase.unpack",false]],"validate() (rns.identity method)":[[7,"RNS.Identity.validate",false]]},"objects":{"RNS":[[7,0,1,"","Buffer"],[7,0,1,"","Destination"],[7,0,1,"","Identity"],[7,0,1,"","Link"],[7,0,1,"","MessageBase"],[7,0,1,"","Packet"],[7,0,1,"","PacketReceipt"],[7,0,1,"","RawChannelReader"],[7,0,1,"","RawChannelWriter"],[7,0,1,"","RequestReceipt"],[7,0,1,"","Resource"],[7,0,1,"","Reticulum"],[7,0,1,"","Transport"]],"RNS.Buffer":[[7,1,1,"","create_bidirectional_buffer"],[7,1,1,"","create_reader"],[7,1,1,"","create_writer"]],"RNS.Channel":[[7,0,1,"","Channel"]],"RNS.Channel.Channel":[[7,1,1,"","add_message_handler"],[7,1,1,"","is_ready_to_send"],[7,2,1,"","mdu"],[7,1,1,"","register_message_type"],[7,1,1,"","remove_message_handler"],[7,1,1,"","send"]],"RNS.Destination":[[7,3,1,"","RATCHET_COUNT"],[7,3,1,"","RATCHET_INTERVAL"],[7,1,1,"","accepts_links"],[7,1,1,"","announce"],[7,1,1,"","app_and_aspects_from_name"],[7,1,1,"","clear_default_app_data"],[7,1,1,"","create_keys"],[7,1,1,"","decrypt"],[7,1,1,"","deregister_request_handler"],[7,1,1,"","enable_ratchets"],[7,1,1,"","encrypt"],[7,1,1,"","enforce_ratchets"],[7,1,1,"","expand_name"],[7,1,1,"","get_private_key"],[7,1,1,"","hash"],[7,1,1,"","hash_from_name_and_identity"],[7,1,1,"","load_private_key"],[7,1,1,"","register_request_handler"],[7,1,1,"","set_default_app_data"],[7,1,1,"","set_link_established_callback"],[7,1,1,"","set_packet_callback"],[7,1,1,"","set_proof_requested_callback"],[7,1,1,"","set_proof_strategy"],[7,1,1,"","set_ratchet_interval"],[7,1,1,"","set_retained_ratchets"],[7,1,1,"","sign"]],"RNS.Identity":[[7,3,1,"","CURVE"],[7,3,1,"","KEYSIZE"],[7,3,1,"","RATCHETSIZE"],[7,3,1,"","RATCHET_EXPIRY"],[7,3,1,"","TRUNCATED_HASHLENGTH"],[7,1,1,"","current_ratchet_id"],[7,1,1,"","decrypt"],[7,1,1,"","encrypt"],[7,1,1,"","from_bytes"],[7,1,1,"","from_file"],[7,1,1,"","full_hash"],[7,1,1,"","get_private_key"],[7,1,1,"","get_public_key"],[7,1,1,"","get_random_hash"],[7,1,1,"","load_private_key"],[7,1,1,"","load_public_key"],[7,1,1,"","recall"],[7,1,1,"","recall_app_data"],[7,1,1,"","sign"],[7,1,1,"","to_file"],[7,1,1,"","truncated_hash"],[7,1,1,"","validate"]],"RNS.Link":[[7,3,1,"","CURVE"],[7,3,1,"","ESTABLISHMENT_TIMEOUT_PER_HOP"],[7,3,1,"","KEEPALIVE"],[7,3,1,"","KEEPALIVE_TIMEOUT_FACTOR"],[7,3,1,"","STALE_GRACE"],[7,3,1,"","STALE_TIME"],[7,1,1,"","get_age"],[7,1,1,"","get_channel"],[7,1,1,"","get_establishment_rate"],[7,1,1,"","get_expected_rate"],[7,1,1,"","get_mdu"],[7,1,1,"","get_mode"],[7,1,1,"","get_mtu"],[7,1,1,"","get_q"],[7,1,1,"","get_remote_identity"],[7,1,1,"","get_rssi"],[7,1,1,"","get_snr"],[7,1,1,"","identify"],[7,1,1,"","inactive_for"],[7,1,1,"","no_data_for"],[7,1,1,"","no_inbound_for"],[7,1,1,"","no_outbound_for"],[7,1,1,"","request"],[7,1,1,"","set_link_closed_callback"],[7,1,1,"","set_packet_callback"],[7,1,1,"","set_remote_identified_callback"],[7,1,1,"","set_resource_callback"],[7,1,1,"","set_resource_concluded_callback"],[7,1,1,"","set_resource_started_callback"],[7,1,1,"","set_resource_strategy"],[7,1,1,"","teardown"],[7,1,1,"","track_phy_stats"]],"RNS.MessageBase":[[7,3,1,"","MSGTYPE"],[7,1,1,"","pack"],[7,1,1,"","unpack"]],"RNS.Packet":[[7,3,1,"","ENCRYPTED_MDU"],[7,3,1,"","PLAIN_MDU"],[7,1,1,"","get_q"],[7,1,1,"","get_rssi"],[7,1,1,"","get_snr"],[7,1,1,"","resend"],[7,1,1,"","send"]],"RNS.PacketReceipt":[[7,1,1,"","get_rtt"],[7,1,1,"","get_status"],[7,1,1,"","set_delivery_callback"],[7,1,1,"","set_timeout"],[7,1,1,"","set_timeout_callback"]],"RNS.RawChannelReader":[[7,1,1,"","__init__"],[7,1,1,"","add_ready_callback"],[7,1,1,"","remove_ready_callback"]],"RNS.RawChannelWriter":[[7,1,1,"","__init__"]],"RNS.RequestReceipt":[[7,1,1,"","concluded"],[7,1,1,"","get_progress"],[7,1,1,"","get_request_id"],[7,1,1,"","get_response"],[7,1,1,"","get_response_time"],[7,1,1,"","get_status"]],"RNS.Resource":[[7,1,1,"","advertise"],[7,1,1,"","cancel"],[7,1,1,"","get_data_size"],[7,1,1,"","get_hash"],[7,1,1,"","get_parts"],[7,1,1,"","get_progress"],[7,1,1,"","get_segments"],[7,1,1,"","get_transfer_size"],[7,1,1,"","is_compressed"]],"RNS.Reticulum":[[7,3,1,"","ANNOUNCE_CAP"],[7,3,1,"","LINK_MTU_DISCOVERY"],[7,3,1,"","MINIMUM_BITRATE"],[7,3,1,"","MTU"],[7,1,1,"","blackhole_sources"],[7,1,1,"","get_instance"],[7,1,1,"","interface_discovery_sources"],[7,1,1,"","link_mtu_discovery"],[7,1,1,"","publish_blackhole_enabled"],[7,1,1,"","remote_management_enabled"],[7,1,1,"","required_discovery_value"],[7,1,1,"","should_use_implicit_proof"],[7,1,1,"","transport_enabled"]],"RNS.Transport":[[7,3,1,"","PATHFINDER_M"],[7,1,1,"","await_path"],[7,1,1,"","deregister_announce_handler"],[7,1,1,"","has_path"],[7,1,1,"","hops_to"],[7,1,1,"","next_hop"],[7,1,1,"","next_hop_interface"],[7,1,1,"","register_announce_handler"],[7,1,1,"","request_path"]]},"objnames":{"0":["py","class","Python class"],"1":["py","method","Python method"],"2":["py","property","Python property"],"3":["py","attribute","Python attribute"]},"objtypes":{"0":"py:class","1":"py:method","2":"py:property","3":"py:attribute"},"terms":{"":[0,2,5,6,9,10,11],"0":[0,2,5,7,9,10,11],"00":[9,10],"00000000":9,"00000100":9,"00000111":9,"01":9,"01010000":9,"02":2,"05":0,"0536":10,"06915":5,"08":[0,10],"0f4259fef4521ab75a3409e353fe9073eb10783b4912a6a9937c57bf44a62c1":10,"0x0101":0,"0x20":0,"0x7d":0,"0x7e":0,"0x91c421ddfb8a30a49a71d63447ddb54cebe3465":8,"0xf000":[0,7],"1":[0,2,5,7,9,10],"10":[5,9,10],"100":[0,5,9],"1000":0,"10000000":9,"1024":0,"11":9,"115":9,"115200":[0,5,10],"1178a8f1fad405bf2ad153bf5036bdfd":10,"118":5,"12":[2,5,10],"1200":9,"125":5,"125000":5,"127":5,"128":[6,7,9],"13":10,"13425ec15b621c1d928589718000d814":[6,9],"14":5,"15":5,"150":[5,10],"150m":5,"15m":10,"16":[5,6,9,10],"1625":5,"1625000":5,"167":9,"17":10,"1726dbad538775b5bf9b0ea25a4079c8":10,"18":10,"1800":7,"187":10,"1b03013c25f1c2ca068a4f080b844a10":10,"1h":10,"2":[0,2,5,7,9,10],"20":[5,9,10],"200":[5,10],"201":5,"2023":[2,10],"2026":2,"21":2,"22":5,"2225fdeecaf6e2db4556c3c2d7637294":10,"23":10,"2316":10,"23h":10,"24":[5,10],"2400000000":5,"25":[0,4,11],"255":[5,10],"25519":7,"256":[5,6,7,9,10,11],"2592000":7,"27":10,"29":5,"297":[9,11],"29716":5,"2b489d06eaf7c543808c76a5332a447d":10,"2b9ec651326d9bc274119054c70fb75":10,"2d03725b327348980d570f739a3a5708":10,"2d882c5586e548d79b5af27bca1776dc":10,"2f":0,"2owjajquafianpecac":2,"3":[0,2,5,9,10,11],"30":[5,7,10],"30602def3b3506a28ed33db6f60cc6c9":10,"32":[2,7,9],"3278":5,"32m":10,"33":5,"34":5,"360":[5,7],"3600":[0,5],"37428":10,"37429":10,"38":10,"383":7,"3865":10,"399ea050ce0eed1816c300bcb0840938":10,"3a4f8b9c1d2e3f4g5h6i7j8k9l0m1n2o":10,"3b87":5,"4":[7,9,10],"40m":10,"4242":[2,5],"4251":5,"42671":5,"430":9,"4343":5,"44":11,"44318":5,"45":[0,9],"46":10,"464":7,"465":9,"469":10,"48555":5,"49":10,"49555":5,"4965":[2,10],"4e":5,"4faf1b2e0a077e6a9d92fa051f256038":9,"4ghz":5,"5":[0,5,7,9,10,11],"500":[5,7,9,11],"5001":5,"51":[5,9],"512":[5,7,9,11],"52":10,"521c87a83afb8f29e4455e77930b973b":10,"5245a8efe1788c6a1cd36144a270e13b":10,"55":5,"56":10,"564":0,"56m":10,"5757":5,"5858":5,"59":10,"5caf":5,"5d78":5,"5urvjicpzi7q3ybztsef4i5ow2aq4soktfj7zedz53s47r54jnqq":5,"6":[5,7,10],"60":[0,5],"600":5,"63":10,"64":[2,9,10],"68a4aa91ac350c4087564e8a69f84e86":10,"7":[2,5,9,10],"71e5":5,"72":5,"720":[5,7],"7200":5,"73":[5,10],"73cbd378bb0286ed11a707c13447bb1":10,"74":10,"74195":5,"781":10,"7822":10,"7a55144adf826958a9529a3bcf08b149":10,"8":[0,5,10],"80":10,"8001":5,"809":10,"83":[9,10],"84fpy1qbxhcgdseepynmhthcrgmx4nffbytz2gkytoqhvvhjp8eaw1z1eedrnkd19b3b8nilcgvxzkv17ummmeescrpya5w":8,"86":10,"865":5,"865600000":5,"867":5,"867200000":5,"868":9,"88":5,"89":5,"8dd57a738226809646089335a6b03695":10,"9":[2,7,10],"900":9,"9037":10,"921600":10,"941bed5e228775e5a8079fc38b1ccf3f":10,"96":9,"9600":0,"984b74a3f768bef236af4371e6f248cd":10,"99":9,"99714":5,"9fb6d773498fb3feda407ed8ef2c3229":10,"9h":10,"A":[0,2,5,6,7,9,10],"And":0,"As":[2,3,5,7,9,10,11],"At":[2,9],"Be":[7,10],"But":9,"By":[0,2,5,7,9,10],"For":[2,5,6,7,9,10,11],"IN":[0,7],"If":[0,2,3,5,6,7,9,10,11],"In":[0,2,3,5,6,7,9,10,11],"It":[0,2,3,5,6,7,9,10,11],"No":[0,2,5,6,9,10,11],"Not":4,"Of":[6,9],"On":[0,2,5,6,10],"One":[2,3,7,9],"Or":[5,10,11],"That":9,"The":[0,2,3,4,5,6,7,11],"Then":[0,2],"There":[2,6,9,10],"These":[2,5,6,7,9,10],"To":[0,2,3,5,6,9,10],"Will":7,"With":[4,5,6,9,10],"_":9,"__":9,"______":9,"_______":9,"________":9,"________________":9,"__future__":0,"__init__":[0,7],"__main__":0,"__name__":0,"__str__":0,"a4d":5,"a79f":5,"aarch64":2,"ab":0,"abil":[2,3,10,11],"abl":[0,2,5,7,9,10],"abort":[0,5],"about":[0,2,3,5,6,7,9,10],"abov":[2,3,5,9,10],"absolut":[5,8,11],"abstract":[6,7,9],"abstractmethod":7,"abund":3,"abus":10,"accept":[5,7,8,9,10],"accept_al":[0,7],"accept_app":7,"accept_non":7,"accepts_link":7,"access":[2,4,5,6,7,10],"access_point":[5,6],"accommod":[7,9],"accord":[0,2,6,9],"accordingli":[0,5],"account":6,"achiev":[2,5,6,7,9],"acknowledg":[6,11],"across":[0,3,6,7,9,10],"act":[2,5,7,9,10],"action":[0,10],"activ":[0,2,5,7,9],"actor":[9,10],"actual":[0,2,5,6,9,10],"ad":[0,3,4,5,6,7,9,10,11],"adapt":[2,3],"add":[0,2,5,6,7,10],"add_argu":0,"add_message_handl":[0,7],"add_ready_callback":7,"addit":[2,3,5,6,7,9,10,11],"addition":[2,3,5,9],"addr":10,"address":[0,2,4,5,7,9,10,11],"adher":7,"adjust":[2,7],"admin":5,"administr":[6,9,10],"adopt":9,"adress":[7,9],"advanc":9,"advantag":7,"advers":11,"adversari":[2,6],"advertis":[0,5,7],"advis":[5,9],"ae":[7,9,11],"af73":5,"affect":[2,5],"afford":6,"after":[0,2,5,6,7,9,10],"again":[2,5,9,10],"against":[2,5,9],"agenc":9,"agent":9,"agnost":[6,9],"agnostic":9,"ago":10,"ahead":6,"aim":[2,4,9],"air":[2,3],"airmax":3,"airtim":[5,6],"airtime_limit_long":5,"airtime_limit_short":5,"akin":9,"algorithm":6,"alic":9,"align":[2,10],"aliv":[7,9],"all":[0,2,3,4,5,6,7,8,9,10,11],"allevi":3,"alloc":[5,6,7,9,10],"allow":[0,2,3,5,6,7,9,10,11],"allow_al":[0,7],"allow_list":7,"allow_non":7,"allowed_hash":10,"allowed_ident":10,"allowed_list":7,"almost":[3,5,9,10],"alon":5,"along":[5,7,9,10],"alongsid":6,"alreadi":[0,2,3,6,7,9,10],"also":[0,2,3,4,5,6,7,9,10,11],"alter":[2,7,9],"altern":[0,2,5,10],"although":[2,9,11],"alwai":[2,5,6,7,9,10],"amateur":[5,11],"amount":[0,2,5,6,7,9,11],"amsterdam":[2,5,10],"an":[0,2,3,5,6,7,9,10,11],"analyt":8,"android":[4,5,10],"ani":[0,2,3,5,6,7,8,9,10,11],"annot":0,"annouce_cap":5,"announc":[4,6,7,10],"announce_cap":[5,7],"announce_handl":0,"announce_interv":5,"announce_packet_hash":7,"announce_rate_grac":5,"announce_rate_penalti":5,"announce_rate_target":5,"announced_ident":[0,7],"announceloop":0,"announcesampl":0,"anonym":[2,6,7,9,11],"anoth":[2,6,7,9,10],"answer":[9,10],"antenna":3,"anymor":2,"anyon":[0,2,3,5,6,7,9,10],"anyth":[2,3,5,9,10,11],"anywher":[0,5],"ap":5,"api":[2,4,9,11],"apk":2,"app":[0,2,7,9],"app_and_aspects_from_nam":7,"app_data":[0,7],"app_nam":[0,7],"app_timeout":0,"append":[0,9],"appli":[5,7,9],"applic":[0,2,5,6,7,9,10,11],"approach":[2,3,6,9,10],"appropri":[5,6],"approv":[6,9],"approxim":[5,10],"april":2,"apt":2,"ar":[0,2,3,5,6,7,8,9,10,11],"arbitrari":[7,9,10,11],"arch":2,"architectur":2,"area":[2,3,5,6,9,11],"arg":0,"argon":0,"argpars":0,"argument":[0,7,10],"argumentpars":0,"arm64":4,"around":[5,9],"arrai":2,"arriv":[0,9],"arx":10,"ask":[0,2,3,7],"aspect":[0,2,3,5,6,7,9,10],"aspect_filt":[0,7],"assign":[0,6,9,10],"associ":[7,9,10],"assum":[5,6,9],"assumpt":6,"asymmetr":[9,10,11],"asynchron":6,"attach":10,"attached_interfac":7,"attack":2,"attain":2,"attempt":[0,2,3,7,10],"attribut":7,"atx":10,"audit":11,"auth":10,"authent":[2,5,6,7,9,10,11],"author":[9,10],"authorit":9,"auto":[2,3,4,7,9,10],"auto_compress":7,"autoconfigur":11,"autoconnect_discovered_interfac":[5,10],"autodiscov":5,"autoinstal":[3,10],"autointerfac":[2,3,5,10],"autom":[2,3,4,8,9],"automat":[0,2,5,6,7,9,10,11],"autonom":[6,9],"autonomi":11,"avail":[0,2,3,4,5,6,7,9,10,11],"averag":9,"avoid":[3,9,10],"awai":[0,2,5,9,10],"await_path":7,"awar":[2,5,9],"ax":[4,11],"ax25kissinterfac":5,"b":[0,10],"b32":5,"back":[0,5,9,11],"backbon":[2,3,4,6,10],"backboneinterfac":[2,5,10],"backend":[5,9],"background":[2,5,10],"backhaul":[3,6],"backup":10,"balanc":5,"band":[3,9],"bandwidth":[2,5,6,7,9,10,11],"bare":[0,5],"barrier":[5,9],"base":[4,5,6,7,9,10,11],"base32":[5,10],"base64":10,"bash":5,"basi":[5,7,9,10,11],"basic":[0,2,4,5,6,7,10],"baud":[5,10],"baud_flash":10,"baudrat":0,"bc1pgqgu8h8xvj4jtafslq396v7ju7hkgymyrzyqft4llfslz5vp99psqfk3a6":8,"bc7291552be7a58f361522990465165c":10,"beacon":5,"becaus":[6,9],"becki":0,"becom":[0,2,5,6,7,9],"been":[0,2,3,5,6,7,9,10,11],"befor":[0,2,5,6,7,9,10],"begin":[0,3,7],"begun":7,"behalf":[5,6],"behav":3,"behaviour":[2,5,10],"behind":[2,5,9],"being":[2,5,7,9],"beings":9,"belief":9,"belong":[6,9,10],"below":[2,3,5,10],"benefici":[5,10],"best":[2,6,9,11],"better":[2,5,6,9],"between":[0,5,6,7,9,10],"bi":[7,9],"bidirect":9,"billion":[6,9],"bin":[2,5,10],"binari":[0,2,5,6,7,9,10],"bind":5,"bit":[0,2,5,6,7,9,10,11],"bitcoin":8,"bitrat":[0,5,7],"blackhol":[2,4,6,7,9],"blackhole_sourc":[7,10],"blackholed_ident":10,"blackholeupdat":10,"ble":5,"blindli":10,"blob":[0,9],"block":[2,5,6,7,9,10],"blocklist":10,"bluetooth":10,"board":[2,4,5,9,11],"bogu":5,"boil":3,"bookworm":4,"bool":7,"boot":[2,10],"bootstrap":[4,5,10],"bootstrap_onli":[2,5],"both":[0,2,3,5,6,7,9,10,11],"bounc":2,"bound":6,"boundari":[5,6,9],"box":3,"break":[2,7,9,11],"breath":2,"breviti":10,"bridg":[3,5],"briefli":[3,9],"bring":[5,10],"brittl":2,"broad":[2,3],"broadcast":[2,4,5,6,7,9,10],"broadcast_destin":0,"broadcastloop":0,"broader":9,"broken":2,"brought":[5,10],"browser":2,"buffer":[4,5,7,11],"bufferedread":7,"bufferedrwpair":7,"bufferedwrit":7,"bufferexampl":0,"bug":11,"build":[0,3,4,5,9,11],"built":[2,5,6,9,10,11],"bundl":0,"bureaucrat":11,"burst":5,"bw":10,"byte":[0,6,7,9,10,11],"bytes":0,"c":[0,10],"c50cc4e4f7838b6c31f60ab9032cbc62":10,"c89b4da064bf66d280f0e4d8abfd9806":10,"cabl":5,"cach":[5,6,10],"calcul":[6,7,9,10],"call":[0,6,7,9,11],"callabl":[0,7],"callback":[0,7],"callsign":5,"can":[0,2,3,4,5,6,7,8,9,10],"cancel":7,"candid":6,"cannot":[0,2,5,6,11],"cap":5,"capabl":[0,5,6,9],"capac":[2,3,5,6,7,9],"car":6,"carambola":0,"care":[2,6,7,10,11],"carefulli":2,"cargo_build_target":2,"carri":[5,6,7,9,10,11],"carrier":[6,11],"case":[0,2,3,5,6,9,10],"cat":10,"categori":3,"caus":[2,5],"caution":5,"caveat":4,"cb":[7,9],"cbc":[9,11],"cdma":5,"cell":6,"censor":[9,10],"censorship":[9,11],"central":[2,3,5,6,9,10],"centralis":9,"certain":[0,5,6,8,9,10],"chain":5,"challeng":[2,9],"chanc":3,"chang":[0,2,5,7,9,10,11],"channel":[2,4,5,6,7,8,9,11],"channelarg":0,"channelexampl":0,"chapter":[2,3,5,6,7,9,10,11],"charact":[0,5],"characterist":[5,6,9],"charter":9,"cheap":[3,5,9],"cheapli":2,"check":[0,2,7,9,10],"checksum":[7,11],"choic":[2,6],"choos":[0,2,5,9],"chose":9,"chosen":9,"chunk":0,"cific":5,"ciphertext":7,"ciphertext_token":7,"circumst":[8,9],"cl":0,"claim":9,"class":[0,6,7,11],"clear":[0,5,7,9,10],"clear_default_app_data":7,"clear_screen":0,"client":[0,2,3,4,7,10],"client_buffer_readi":0,"client_connect":0,"client_disconnect":0,"client_ident":0,"client_loop":0,"client_message_receiv":0,"client_packet_receiv":0,"client_request":0,"clone":9,"close":[0,6,7,10],"closed_callback":7,"closer":9,"closest":9,"cloud":5,"cluster":9,"co":[3,5,11],"code":[2,3,4,5,6,10],"codingr":5,"coexist":6,"collabor":9,"collaps":2,"collect":8,"collis":6,"com":[0,8],"combin":[2,4,9],"come":[2,5,6,9],"comma":[5,10],"command":[0,2,5,10],"comment":[5,10],"commis":2,"commit":2,"common":[0,2,3,4,6,9,10,11],"commonli":[3,5],"commun":[0,2,4,5,6,7,8,9,10,11],"communica":5,"compar":6,"compat":[0,2,3,5,7,9,10],"compil":2,"complet":[0,2,3,5,6,7,9,10,11],"complex":[2,5,9],"compli":6,"compon":[3,8,9],"compos":9,"compress":[0,7,9,10,11],"compromis":9,"comput":[2,5,9,11],"computation":[5,10],"concaten":7,"conceiv":[2,3],"concept":[4,9,10],"conceptu":4,"concert":9,"conclud":[0,7],"concurr":[3,9,10],"condit":[2,9,11],"conf":2,"config":[0,2,5,6,10],"configarg":0,"configdir":7,"configpath":0,"configur":[0,2,3,4,6,7,9,11],"configuraion":3,"configure_devic":0,"confirm":[6,9,11],"conflict":[2,6],"confus":[3,9],"congest":9,"conjunct":5,"connect":[0,3,4,7,9,10,11],"consequ":[6,9],"conserv":5,"consid":[0,2,5,7,9,10,11],"consider":[4,9],"consist":9,"consol":10,"constant":7,"constantli":9,"constitut":9,"constrain":[6,7],"construct":[9,11],"constructor":0,"consum":[6,7],"consumpt":6,"contact":[6,9],"contain":[0,5,6,7,9,10],"contend":9,"content":[0,2,6,10],"context":[2,9,10],"contin":0,"continu":[5,7,8,10,11],"contribut":[4,6],"control":[0,2,3,4,6,7,9,10,11],"convei":0,"conveni":[0,10],"convent":[0,6],"converg":[2,6,9],"convers":9,"cook":2,"coordin":[5,6,7,9,11],"copi":10,"core":[6,9,10,11],"correct":[0,5,6,9],"correctli":[0,6],"correspond":[6,9],"cost":[3,5,9,11],"could":[0,2,5,6,7,9,10,11],"count":9,"counter":0,"cours":[2,5,6,9],"cover":[2,3,6,9,11],"coverag":6,"cpu":[0,5,6,9],"cpuinfo":10,"cr":10,"creat":[0,4,5,6,7,10,11],"create_bidirectional_buff":[0,7],"create_kei":7,"create_read":7,"create_receipt":[0,7],"create_writ":7,"creation":[6,9,10,11],"creator":9,"credenti":[5,9],"critic":[6,9,10],"cross":5,"crucial":6,"cryptograph":[2,4,5,6,10,11],"cryptographi":[2,9,11],"ctrl":0,"cull":7,"curl":5,"current":[0,2,4,5,7,10],"current_download":0,"current_filenam":0,"current_ratchet_id":7,"curv":[6,7,9,11],"curve25519":[6,7,9,11],"custom":[3,4,7,9,11],"custom_network_nam":5,"customis":5,"d":10,"d56a4fa02c0a77b3575935aedd90bdb2":10,"daemon":[0,2,5,7,10],"dai":7,"data":[0,2,3,4,5,6,7,9,11],"data_buff":0,"data_port":5,"databas":10,"databit":[0,5,10],"datacent":2,"datar":5,"date":[0,2,10],"datetim":0,"db":[0,10],"dbm":[0,5,10],"de":2,"deal":5,"debian":[4,9,10],"debug":[2,10],"decad":3,"decentr":[2,5,10],"decentralis":11,"decid":[5,6,7,9],"decim":5,"decis":[5,6,9],"declar":9,"decod":[0,5,10],"decreas":10,"decrypt":[5,6,7,9,10],"dedic":[5,9],"deep":2,"def":0,"default":[0,2,3,5,6,7,9,10],"default_ifac_s":0,"defin":[0,5,7,9,10],"definit":[0,2,9,10],"defunct":10,"degrad":6,"degre":5,"delai":[2,5,9,10],"deleg":9,"delimit":0,"deliv":[0,2,6,7],"deliveri":[0,2,6,7,11],"demand":7,"demonstr":[0,2,5],"depend":[0,3,4,5,6,7,9,10],"deploi":9,"deregist":7,"deregister_announce_handl":7,"deregister_request_handl":7,"deriv":[2,6,7,9,11],"describ":[3,5,7,9],"descript":[0,10],"descriptor":0,"deseri":0,"deserializ":0,"design":[2,3,5,6,9,10,11],"desir":[0,3,5,9],"desktop":5,"dest_len":0,"destin":[0,2,4,7,10],"destination_1":0,"destination_2":0,"destination_clos":0,"destination_hash":[0,7,10],"destination_hexhash":0,"detach":5,"detail":[0,2,4,5,7,10,11],"detect":0,"determin":[2,6,7,9],"detriment":10,"dev":[0,2,5,10],"devel":2,"develop":[3,4,7,8,9,11],"devic":[0,2,4,5,6,7,9,10],"dh":7,"dhcp":[3,5,6,10],"dict":0,"dictat":10,"dictionari":10,"did":0,"differ":[0,2,3,5,6,7,9,10,11],"diffi":[6,9],"difficult":[2,3,10],"difficulti":[5,10],"digit":[2,3,9,11],"dir":0,"dire":3,"direct":[0,2,3,6,7,9,10],"direction":9,"directli":[2,3,5,6,7,9,10,11],"directori":[0,2,5,6,10],"disabl":[5,9,10],"disappear":[5,10],"disassoci":9,"discard":[2,7,9],"disconnect":[0,2,5],"discov":[2,4,5,6,7,9],"discover":[2,4,10],"discover_interfac":10,"discoveri":[2,4,7,9,10],"discovery_bandwidth":5,"discovery_encrypt":5,"discovery_frequ":5,"discovery_modul":5,"discovery_nam":5,"discovery_port":5,"discovery_scop":5,"discovery_stamp_valu":5,"discrimin":6,"discuss":[2,3,9],"disk":[0,7,10],"displai":[0,5,6,9,10],"disrupt":5,"dissolv":6,"distanc":[3,9,10],"distant":[2,7,9],"distinct":[5,6,9],"distinguish":[6,9],"distribut":[0,2,6,7,9,10,11],"dive":2,"divid":7,"divmod":0,"dn":[3,5],"dnf":2,"do":[0,2,3,5,6,7,9,10],"document":[2,7,9,10],"doe":[0,2,3,4,5,7,9,10],"doesn":[5,6],"domain":[2,5,9,10],"don":[0,2,6,7,9,10],"donat":4,"done":[0,2,5,9,10],"dot":[9,10],"doubt":2,"dowload":2,"down":[0,3,5,7,10],"download":[0,2,5,6,10],"download_began":0,"download_conclud":0,"download_finish":0,"download_start":0,"download_tim":0,"downstream":10,"drastic":10,"driver":[10,11],"droid":2,"drop":[5,6,7,9,10],"dsrdtr":0,"dual":[3,10],"dublin":10,"due":0,"dump":10,"duplex":[9,11],"durat":10,"dynam":[2,5,10],"dysfunct":8,"e":[0,10],"e5c032d3ec4e64a6aca9927ba8ab73336780f6d71790":10,"e702c42ba8":10,"e7536ee90bd4a440e130490b87a25124":10,"each":[0,2,5,6,7,9,10],"earlier":9,"eas":[5,9],"easi":[2,3,5,9,10,11],"easier":[2,5,6,10,11],"easiest":[2,3,5,9],"easili":[2,5,6,9,10,11],"eastern":9,"ecdh":[9,11],"echo":4,"echo_destin":0,"echo_request":0,"ecosystem":[2,5,9,10],"ed25519":[9,11],"edit":[2,10],"eeprom":10,"effect":[5,9,10],"effici":[0,2,5,6,7,9,10,11],"effort":3,"eg":10,"ei":0,"either":[2,3,6,7,9,10],"elaps":5,"element":6,"elif":0,"elimin":6,"ellipt":[6,7,9,11],"els":[0,2,6,9,11],"elsewher":2,"embed":3,"emploi":[3,9],"empow":11,"empti":0,"emptor":4,"emul":2,"enabl":[0,2,3,4,6,7,9,10,11],"enable_ratchet":7,"enable_remote_manag":10,"enable_transport":[5,9,10],"encapsul":[5,11],"encod":[0,7,10],"encount":[2,6],"encourag":2,"encrypt":[0,2,5,6,7,9,10,11],"encrypted_mdu":7,"end":[0,5,6,7,9,11],"endless":5,"endpoint":[0,6,7,9],"energi":2,"enforc":[5,7,9,10],"enforce_ratchet":7,"engin":2,"enhanc":9,"enough":[2,3,5,9],"ensur":[0,2,5,6,7,9,10,11],"ensurepath":2,"enter":[0,10],"entir":[0,2,6,7,9,10],"entiti":[6,9,10],"entri":[0,2,9,10],"entrypoint":[4,5,10],"enumer":0,"envelop":7,"environ":[2,5,6,9],"environment":9,"environmentlogg":9,"eof":5,"ephemer":[6,7,9,11],"epub":4,"equal":[6,7,9],"equip":[5,6,9],"equival":5,"error":[0,2,5,8,10],"esc":0,"esc_mask":0,"escap":0,"esp32":3,"especi":[2,3,5],"essenti":[2,5,9,10],"establish":[0,2,5,6,7,10,11],"established_callback":7,"establishment_timeout_per_hop":7,"etc":10,"eth0":5,"eth1":5,"ethereum":8,"ethernet":[2,4,5,6,9,11],"even":[0,2,5,6,7,9,10,11],"event":5,"eventu":7,"ever":9,"everi":[0,2,5,6,7,9,10],"everydai":2,"everyon":[2,9],"everyth":[0,6,9],"evolv":[6,9],"exact":[3,5,9],"exactli":[7,9],"exampl":[2,3,4,6,7,9,10,11],"example_util":0,"exampleannouncehandl":0,"exampleconfig":[2,10],"exampleinterfac":0,"exce":[0,5,7],"except":[0,5,7],"excess":[5,10],"exchang":[6,7,9,11],"exclud":[7,9],"exclus":2,"execstart":10,"execstartpr":10,"execut":[0,2,5,7,10],"exhaust":[3,9,10],"exist":[0,2,3,5,6,9,10,11],"exit":[0,5,7,10],"expand":[6,9,11],"expand_nam":7,"expect":[0,5,7,9,10],"expens":[3,5],"experi":[2,6,9],"experienc":0,"experiment":[2,11],"expir":5,"expiri":[5,7],"explain":[3,7],"explan":[9,10],"explicit":7,"explicitli":[5,6,9,10],"explor":[0,9,11],"export":[2,10],"expos":[5,7,10],"exposur":5,"extend":[0,7],"extens":[5,11],"extern":[0,2,5,7,10,11],"extra":[2,5,10],"extract":10,"extrem":[2,9,10,11],"f":[0,2,10],"f4":5,"f53a1c4278e0726bb73fcc623d6ce763":10,"fabric":6,"face":[2,5],"facilit":[2,9],"fact":[2,5,11],"factor":[5,7,10],"fail":[0,2,5,7],"failed_callback":[0,7],"failur":[2,5,7],"fake":10,"fals":[0,5,6,7],"famili":2,"far":[2,6,9],"fashion":8,"fast":[4,5,6,7,9],"faster":[2,5,9],"fastest":[5,9],"favor":2,"fe80":2,"featur":[2,5,6,7,8,9,11],"feder":[9,10],"fedora":2,"feed":[2,7],"feedback":[0,4],"feel":2,"fernet":9,"fetch":[5,10],"few":[2,3,5,6,9,10,11],"fewer":7,"ff":10,"fi":8,"fiber":3,"fibr":11,"field":9,"file":[0,2,3,5,6,7,9,10,11],"file_resourc":0,"file_s":0,"filelist":0,"filelist_data":0,"filelist_receiv":0,"filelist_timeout_job":0,"filenam":0,"filetransf":[4,7],"filter":[0,6,9,10],"final":[0,7,9],"find":[4,5,9,10],"find_spec":0,"fine":5,"firewal":[2,5,6],"firmwar":[2,3,9,10],"firmware_hash":10,"first":[0,2,5,6,7,9,10],"fit":0,"five":0,"fix":[4,9],"fixed_mtu":5,"flag":[0,2,7,9,10],"flash":10,"fleet":9,"flexibl":[2,3,5,6,11],"fli":9,"flight":7,"float":[0,7],"flood":[5,10],"flow":[0,2,5,6,9],"flow_control":5,"flush":0,"focu":10,"focus":9,"folder":0,"follow":[0,2,3,5,7,8,9,10,11],"forc":[0,10],"forcibli":[7,10],"foreground":2,"foremost":11,"forget":[6,10],"form":[2,5,6,7,9,10],"format":[0,4,10,11],"forth":0,"forward":[5,6,7,9,11],"forward_ip":5,"forward_port":5,"found":[0,2,5,7,9,10],"foundat":[6,9,11],"frame":[0,5],"free":[2,6,8,11],"freedom":9,"freedv":3,"freeli":9,"freq":10,"frequenc":[2,3,5,9,10],"frequent":[5,6],"friend":2,"friendli":2,"from":[0,2,3,5,6,7,9,10,11],"from_byt":7,"from_fil":7,"from_identity_hash":7,"fromhex":0,"front":9,"fruit":0,"ftdi_ft230x_basic_uart_43891ckm":10,"full":[0,2,5,6,7,9,10,11],"full_hash":7,"full_nam":[7,10],"fulli":[0,2,3,5,9,10,11],"funcion":7,"function":[0,2,3,4,5,6,7,8,10,11],"fundament":[3,6,9,10],"further":[2,4,5],"futur":[4,6,7,10],"fw":10,"g":[0,9,10],"ga":0,"gain":[2,3,7,9],"galact":9,"gap":2,"gatekeep":9,"gatewai":[0,2,5,6,9,10],"gbp":10,"gener":[0,2,3,5,6,7,9,10,11],"generalis":11,"genuin":10,"geograph":[2,5],"get":[0,3,4,5,6,7,10],"get_ag":7,"get_channel":[0,7],"get_config_obj":0,"get_data_s":7,"get_establishment_r":7,"get_expected_r":7,"get_external_ip":5,"get_hash":7,"get_inst":7,"get_mdu":7,"get_mod":7,"get_mtu":7,"get_packet_rssi":0,"get_packet_snr":0,"get_part":7,"get_private_kei":7,"get_progress":[0,7],"get_public_kei":7,"get_q":7,"get_random_hash":[0,7],"get_remote_ident":[0,7],"get_request_id":7,"get_respons":7,"get_response_tim":7,"get_rssi":7,"get_rtt":[0,7],"get_seg":7,"get_snr":7,"get_statu":7,"get_transfer_s":7,"geti2p":5,"ghz":9,"gi":0,"gigabit":6,"gigabyt":11,"github":[0,2,8],"give":[2,5,9,10],"given":[5,6,7,9,10],"global":[0,4,5,6,7,9,10,11],"glue":3,"go":[0,5,6,9],"goal":[2,4,5,6],"goe":2,"good":[2,3,6,9,10],"got":0,"got_respons":0,"govern":9,"grace":7,"gracefulli":[5,6],"grant":10,"grape":0,"graphic":2,"gratefulli":8,"great":[2,9],"greater":[7,9,10,11],"greatli":[2,5],"group":[5,7,9],"group_id":5,"groupinstal":2,"grow":2,"grown":2,"growth":2,"guarante":[6,9],"guess":5,"guid":[2,3,9],"guidelin":2,"gw":5,"h":10,"ha":[0,2,3,5,6,7,9,11],"hack":11,"had":9,"half":[9,11],"hand":0,"handheld":9,"handl":[0,2,3,5,6,7,9,10,11],"handler":[0,7,10],"happen":[0,2,7,9],"hard":[2,3],"hardcod":2,"hardlin":6,"hardwar":[0,2,4,5,7,9,10,11],"has_path":[0,7],"hasattr":0,"hash":[0,6,7,9,10],"hash1":9,"hash2":9,"hash_from_name_and_ident":7,"hashlib":9,"hashmap":0,"have":[0,2,3,5,6,7,9,10],"hazard":7,"hdlc":0,"head":2,"header":[0,5,7,9],"header_1":9,"header_2":9,"health":4,"hear":9,"heard":[7,9,10],"height":5,"held":[5,10],"helium":0,"hellman":[6,9],"help":[0,2,6,8,9,10],"helper":0,"here":[0,2,5,9,10],"heterogen":[4,11],"hex":[0,10],"hexadecim":[0,9,10],"hexbyt":10,"hidden":10,"hide":2,"hierarch":11,"high":[2,3,5,6,9,10,11],"higher":[5,6,11],"highest":7,"highli":[2,5,9],"hint":0,"hit":0,"hkdf":9,"hmac":[9,11],"hoc":11,"hold":[5,7,9],"holder":6,"home":[2,6,10],"homebrew":5,"hop":[5,6,7,9,10,11],"hopefulli":6,"hops_to":7,"host":[0,4,5,6,9,10],"hostnam":5,"hour":[0,5,10],"hous":2,"how":[0,2,3,5,6,9,10,11],"howev":[2,5,6,9],"http":[0,8],"hub":[2,5,10],"human":[0,5,6,7,8,9],"hundr":[2,6],"hungri":3,"hw_mtu":0,"hwrev":10,"hygien":10,"hz":[5,10],"i":[0,2,3,4,5,6,7,8,9,10],"i2p":[2,4,6,11],"i2p_tunnel":5,"i2pd":[2,5],"i2pinterfac":[2,5],"ia":10,"ic":3,"ic_burst_freq":5,"ic_burst_freq_new":5,"ic_burst_hold":5,"ic_burst_penalti":5,"ic_held_release_interv":5,"ic_max_held_announc":5,"ic_new_tim":5,"id":[5,7,9,10],"id_callsign":5,"id_interv":5,"idea":[2,9,10],"ideal":11,"ident":[0,2,4,5,6,7,10,11],"identif":[4,5,11],"identifi":[0,5,6,7,9,10],"identifyexampl":0,"identity_data":10,"ie":10,"if00":10,"ifac":[0,2,5,6,9,10],"ifac_s":5,"ifconf":0,"ifconfig":10,"ignor":[5,6,7,9,10],"ignored_devic":5,"illustr":[0,5,9],"imagin":6,"immedi":[5,10],"impact":[5,6,7,9],"imperson":6,"implement":[0,5,6,7,8,9,11],"implic":[4,5,6],"implicit":[6,7,9],"implicitli":10,"import":[0,2,3,5,6,7,8,9,10],"importlib":0,"imposs":9,"impract":10,"improv":[2,4,5,8],"in_fram":0,"in_wait":0,"inactive_for":7,"inadvert":10,"inbound":[0,5,7],"inbox":6,"includ":[0,3,4,5,6,7,9,11],"inclus":6,"incom":[0,5,7,10],"incompat":[7,9],"incomplet":6,"increas":[5,7,10],"incur":5,"indefinit":10,"independ":[7,9],"index":[0,2,4],"indic":[0,7],"indirectli":9,"individu":[2,5,7,9,10,11],"inevit":[2,9],"infer":9,"influx":5,"info":[7,9,10],"inform":[0,2,4,5,6,7,9,10],"infrastructur":[3,4,5,6,9,10],"ingo":7,"ingress":[0,5],"ingress_control":5,"inher":6,"init":2,"initi":[0,5,6,7,9,11],"initialis":[0,7,10],"input":[0,10],"insert":9,"insid":9,"inspect":[2,5,6,9,10],"instal":[0,4,5,9,10,11],"instanc":[0,4,5,7,9,10],"instance_control_port":10,"instance_nam":10,"instanti":7,"instantli":10,"instead":[0,2,5,7,9,10],"instruct":2,"int":[0,7],"integ":[0,7],"integr":[2,9,10],"intend":[2,5,6,9,10],"intens":10,"intent":6,"intention":9,"inter":[7,9],"inter_byte_timeout":0,"interact":[0,2,6,7,9,10],"intercept":6,"interchang":5,"interconnect":[5,6,9],"interest":[2,9],"interfac":[3,4,6,7],"interface_class":0,"interface_discovery_sourc":[7,10],"interface_en":10,"interfer":[6,10],"intermedi":6,"intermediari":[5,7,9],"intermitt":[5,6],"intern":[0,5,7,9],"internal_1":5,"internet":[4,5,6,9,10,11],"interoper":[2,3,6,9,11],"interrupt":5,"interv":[5,7,10],"intervent":10,"intiat":0,"introduc":9,"introduct":4,"introductori":4,"intuit":[6,11],"invalid":[0,5,7],"invers":9,"invest":6,"invis":[2,5],"invit":5,"involv":6,"io":3,"ioerror":0,"iot":3,"ip":[2,3,5,6,9,10,11],"ipv4":5,"ipv6":[2,5,10],"is_compress":7,"is_connected_to_shared_inst":0,"is_open":0,"is_path_respons":7,"is_ready_to_send":[0,7],"isdir":0,"isfil":0,"isinst":0,"ism":[3,9],"isol":[2,5,10],"isp":[5,6],"issu":[4,5,6,8],"its":[3,5,6,7,9,10],"itself":[2,4,6,9,10],"iv":[9,11],"j":10,"jail":10,"job":0,"join":[0,2,6,8,9],"journei":6,"json":10,"just":[0,2,3,5,6,9,11],"k":[0,10],"kb":10,"kbp":10,"keep":[0,2,6,7,9,10,11],"keepal":[7,9],"keepalive_timeout_factor":7,"kei":[0,4,5,6,7,10,11],"kept":[5,6,7,9],"kernel":[5,10,11],"keyboardinterrupt":0,"keyerror":7,"keypair":[6,9],"keyset":[9,10,11],"keysiz":7,"keystor":6,"khz":5,"ki":0,"kill":[7,9],"kind":[3,5,6,9],"kiss":[3,4,10,11],"kiss_fram":5,"kissinterfac":[5,10],"know":[0,2,3,5,6,7,9],"knowledg":[6,9],"known":[0,5,7,9,10],"ko":8,"krypton":0,"l":[5,10],"lack":9,"laid":9,"lan":5,"laptop":6,"larg":[0,3,5,6,7,9,10,11],"larger":[6,9,10],"laser":5,"last":[0,5,7,10],"last_read_m":0,"last_unit":0,"latenc":[2,6,9,11],"later":[0,2,5,10],"latest":[0,2,5,7,10],"latest_buff":0,"latest_client_link":0,"latitud":5,"laucnh":2,"launch":[2,10],"layer":[3,5,6,7,9,10,11],"lead":[2,9],"leak":2,"learn":[0,2,6,8,9],"least":[2,3,5,6,9,10,11],"leav":[2,6,9],"ledger":9,"left":[5,7,9,10],"legaci":6,"legal":5,"legisl":5,"legitim":[2,6,10],"len":0,"length":[0,5,7,9],"less":[0,2,3,5,7,9,11],"let":[0,2,5,6,9,10],"level":[3,5,6,9,10],"liber":3,"liberapai":8,"libffi":2,"librari":2,"licens":9,"lift":10,"light":10,"lightweight":11,"like":[0,2,3,5,6,7,9,10,11],"limit":[0,2,3,4,6,9],"line":[0,2,4,5,9,10,11],"linger":10,"link":[2,3,4,5,6,7,10,11],"link_clos":0,"link_establish":0,"link_id":[0,7],"link_mtu_discoveri":7,"linkexampl":0,"linux":[2,3,5,9],"list":[0,2,3,4,5,7,9,11],"list_deliv":0,"list_fil":0,"list_filt":10,"list_packet":0,"list_receipt":0,"list_timeout":0,"listdir":0,"listen":[0,2,4,9,10],"listen_ip":5,"listen_on":[2,5],"listen_port":5,"littl":[3,9],"live":[2,7],"lki":9,"lkr":9,"ll":[0,11],"ln":10,"load":[0,2,3,5,7,10,11],"load_private_kei":7,"load_public_kei":7,"local":[0,2,4,5,6,7,9,11],"locat":[2,5,6,9,10],"log":[0,2,5,10],"log_crit":0,"log_error":0,"log_info":0,"log_verbos":0,"logdest":7,"logic":9,"loginctl":10,"loglevel":[0,7,10],"long":[0,2,3,5,6,7,9,10],"longer":[0,2,9,10],"longest":5,"longitud":5,"look":[0,2,5,6,9,10],"loop":0,"lora":[2,3,4,6,9,11],"lorawan":[3,9],"loss":[5,6,9],"lot":[6,9],"low":[2,3,5,6,9,11],"lower":[0,2,5,10],"ltu":3,"lunar":4,"lxmf":[2,5,6,7,10],"m":[0,2,9,10],"mac":[5,9],"machin":[2,9,10],"maco":4,"made":[2,5,7,9],"mai":[2,5,6,7,9,10],"main":0,"maintain":[2,6,9,10],"mainten":[6,9],"make":[0,2,3,5,6,8,9,10,11],"malici":[2,6,9,10],"manag":[2,4,6,7,9,11],"mani":[0,2,3,5,6,7,9,10,11],"manipul":[9,11],"manjaro":2,"manner":6,"manual":[0,2,5,6,7,9,10],"manufactur":[3,5],"map":[5,9,10],"mark":[2,7,9],"markqvist":[0,8],"master":[0,7],"match":[0,5,9,10],"matter":[2,5,6],"matur":10,"max":10,"maximum":[0,5,7,9,10],"mbp":10,"mdu":[0,7],"me":5,"mean":[2,3,5,6,7,9,10],"meaning":2,"meantim":7,"measur":[6,9],"mechan":[2,4,5,6,10,11],"medium":[0,3,5,6,7,9,11],"member":[2,9],"memori":[2,6,9],"mention":[5,9],"menu":0,"menu_mod":0,"merg":10,"mesh":[2,5,6,9,10,11],"meshchat":4,"messag":[0,2,6,7,9,10],"message_class":7,"messagebas":[0,4,7],"messagecallbacktyp":7,"messeng":[6,9],"met":2,"metadata":[2,5,9,10],"metavar":0,"meter":5,"meth":0,"method":[0,2,5,7,9],"methodologi":[9,10],"mevpekyafshak5wr":5,"mhz":[5,9],"mi":0,"microcontrol":9,"microwav":6,"might":[2,5,6,9,10],"mikrotik":3,"millimet":3,"millisecond":[0,6,10],"mind":[6,11],"minim":[3,4,5,9],"minimalsampl":0,"minimum":[0,5,7,9,10],"minimum_bitr":7,"minut":[0,2,5,9],"mirror":[6,10],"misconfigur":2,"mislead":2,"miss":[0,2],"mistak":2,"mitig":6,"mix":[4,5,6,10],"mixtur":11,"mobil":[5,6,9],"mode":[0,2,3,4,6,7,9,10,11],"model":[6,10],"modem":[4,5,6,7,9,11],"moder":5,"modern":[2,3],"modifi":[5,6,9,10],"modul":[0,2,3,5,6,9,10,11],"moment":9,"momentarili":5,"monero":8,"monitor":[2,5,9,10],"moon":0,"more":[0,2,3,5,6,7,9,10,11],"most":[2,3,5,6,7,9,10],"mostli":[5,6,9],"motiv":4,"move":[5,6,9,10],"msgtype":[0,7],"mtu":[0,5,7,9,11],"much":[2,5,6,9,10,11],"multi":[4,6,9,10,11],"multicast":5,"multicast_address_typ":5,"multilater":9,"multipl":[0,5,6,9,10],"multiplex":0,"multipoint":9,"multitud":2,"must":[0,2,5,6,7,9,10],"mw":5,"my":[5,9],"my_fil":10,"my_ident":10,"my_network":[9,10],"my_network_ident":5,"mycal":5,"myriad":9,"n":[0,9,10],"name":[0,2,4,5,6,7],"namespac":0,"narg":0,"nat":[2,5],"nativ":[0,6],"natur":5,"nearbi":[5,6],"nearest":5,"nears":9,"neat":6,"neccessari":5,"necesarri":5,"necessari":[3,5,6,7,9],"necessarili":9,"need":[0,2,3,4,5,6,7,9,10,11],"neg":2,"neglig":9,"neither":[7,9],"neon":0,"neopixel":10,"net":5,"netcat":5,"network":[0,3,5,7,10,11],"network_ident":[5,9,10],"network_nam":[2,5],"neutral":6,"never":[5,6,7,9],"new":[0,2,4,6,7,9,10],"new_id":10,"new_ident":10,"newer":[7,9],"newest":9,"newli":[5,7,9],"newlin":5,"next":[2,5,7,9],"next_hop":7,"next_hop_interfac":7,"nicknam":9,"no1cll":5,"no_data_for":7,"no_inbound_for":7,"no_outbound_for":7,"noauth":10,"nobl":0,"noble_ga":0,"noble_gas":0,"nocheck":10,"node":[2,4,5,10,11],"noid":10,"nois":7,"nomad":4,"nomadnet":2,"non":[2,5,7,9],"none":[0,2,5,7,9,10],"nor":2,"normal":[0,2,5,7,9,10],"notat":[9,10],"note":[0,3,4,5,7,9,10],"noth":[3,6,11],"notic":[5,9,10],"notif":[0,7],"now":[0,2,9,10],"np":10,"nrf52":3,"nt":0,"num":0,"number":[0,2,5,6,7,9,10],"o":[0,2,5,9,10,11],"object":[0,7],"obscur":2,"observ":6,"obtain":[2,3,7,9],"obvious":9,"occur":[0,5,10,11],"ocur":7,"odd":0,"off":[2,5,6,9,10,11],"offer":[2,4,5,6,7,9,10],"offic":6,"offlin":[0,2,6],"often":[2,5,6,9,10],"oganesson":0,"old":[0,2,3,8,9],"older":10,"omit":7,"on_interfac":7,"onc":[0,2,3,5,7,9,10,11],"one":[0,2,3,5,6,7,9,10,11],"ones":[2,5,6,10],"oneself":9,"onli":[0,2,3,5,6,7,9,10,11],"onlin":[0,10],"onto":[2,9],"opaqu":6,"open":[0,2,3,5,6,7,8,9,10,11],"open_port":0,"openmodem":[5,11],"openssl":[2,9],"openwrt":4,"oper":[2,3,5,6,7,9,10,11],"opkg":2,"opportunist":6,"opposit":[0,5],"opt":9,"optic":[3,11],"optim":[2,6],"option":[0,2,3,4,6,7,9,10],"ord":0,"order":[0,7,10],"organ":[2,6,9,10],"organis":[5,8],"orient":9,"origin":[0,6,9],"os":2,"other":[0,2,3,5,6,7,9,10],"otherwis":[0,7],"our":[0,5,9],"ourselv":6,"out":[0,2,3,5,7,9,10],"outbound":[7,9],"outgo":[0,5,7,9,10],"outlin":[2,3,9],"output":[5,10],"outsid":[7,11],"over":[0,3,4,5,6,7,9,10,11],"overal":[9,10],"overcom":9,"overhead":[2,3,5,9,10],"overlai":2,"overrid":0,"oversight":9,"overview":[4,5],"overwhelm":[5,6,7],"overwrit":10,"own":[0,2,6,7,9,10,11],"owner":0,"p":[0,10],"pack":[0,7],"packag":[0,2,5,9],"packb":0,"packed_s":0,"packet":[0,2,4,5,6,7,10,11],"packet_callback":0,"packet_deliv":0,"packet_hash":0,"packet_receipt":[0,7],"packet_timed_out":0,"packetreceipt":[0,4,7],"pad":[9,11],"page":[2,4,9,10],"pair":[5,7,9,10],"pamac":2,"panic":[0,10],"panic_on_interface_error":[0,10],"paper":2,"par":[0,2],"parallel":2,"param":0,"paramet":[0,3,4,7,9,10],"pariti":[0,5,10],"parity_even":0,"parity_non":0,"parity_odd":0,"pars":0,"parse_arg":0,"parser":0,"part":[0,2,5,6,7,9,10],"particip":[2,4,5,6,9,10],"particular":[0,3,5,9,10],"particularli":[5,10],"pass":[0,3,5,6,7,9,10],"passphras":[2,5,6,9],"passport":9,"past":10,"path":[0,2,3,5,6,7,9,10],"path_respons":7,"pathfinder_m":7,"pattern":[3,6,9],"payload":[0,5,7,9,10],"pdf":4,"peach":0,"peer":[0,2,5,7,9,10],"penalti":5,"pend":[0,9],"peopl":[2,9],"per":[5,6,7,9,10,11],"percent":[0,5],"percentag":7,"perfectli":2,"perform":[0,2,5,6,7,9,10],"perhap":2,"period":[0,5,7,9,10],"perman":[2,5,10],"permiss":5,"permissionless":[9,10],"persecut":9,"persist":[5,10],"person":[4,5,6,9],"perspect":[5,6,7,9,11],"pet":0,"philosophi":9,"phone":[2,6],"phy":10,"physic":[0,2,3,5,6,7,9,10,11],"pi":[0,4,6,9,10,11],"pick":9,"piec":9,"ping":10,"pip":[0,2,3,5,10],"pip3":2,"pipe":[2,4,11],"pipeinterfac":[3,5],"pipx":2,"pitfal":9,"pkcs7":[9,11],"pkg":2,"place":[0,2,5,6,9,10],"plaform":3,"plain":[0,3,5,7,9],"plain_mdu":7,"plaintext":[0,7],"plan":[6,9],"planetari":11,"platform":[0,3,4,9,10],"pleas":[0,2,5,7,10],"plenti":[6,9],"plug":10,"pmr":9,"point":[2,3,5,6,9,10],"pointer":2,"polici":10,"pomelo":0,"popul":7,"popular":11,"port":[0,2,3,4,5,6,9,11],"port0":10,"portabl":[5,6,9],"pose":[2,9],"posit":[0,10],"posix":2,"possess":[5,9],"possibl":[2,3,5,6,7,9,10,11],"possibli":[2,9],"post":0,"postfix":10,"potenti":[0,2,5,8,9,10,11],"power":[2,3,5,6,9,10,11],"powershel":2,"ppp":0,"practic":[2,6,9,11],"pre":[2,6,7,9],"preambl":[5,10],"preced":0,"preciou":6,"precompil":2,"predict":9,"prefer":[2,9],"prefer_ipv6":5,"premis":6,"prepar":[0,9],"prerequisit":7,"presenc":[5,7],"present":[5,6,9,10],"preserv":[2,7],"preshar":9,"press":0,"pretend":9,"pretti":9,"prettyhexrep":0,"prevent":[5,6,10],"previou":0,"previous":[5,7,9],"primari":9,"primarili":[5,6],"primarlii":2,"primit":[2,4],"principl":[6,9,11],"print":[0,5,10],"print_filelist":0,"print_help":0,"print_menu":0,"priorit":[6,9],"prioriti":9,"prioritis":[4,5,6,7],"privaci":[2,5,11],"privat":[2,5,6,7,8,9,10,11],"private_ret":2,"privileg":10,"probabl":[0,2,6,9,10,11],"probe":10,"problem":[2,9,10],"proc":10,"procedur":[2,7,9],"process":[0,2,3,5,6,7,9,10],"process_incom":0,"process_outgo":0,"product":10,"profound":6,"program":[0,3,4,5,7,9,11],"program_setup":0,"programm":9,"programmat":9,"progress":[0,7,10,11],"progress_callback":7,"project":2,"promis":2,"prompt":[0,2],"proof":[0,5,6,7,9,10],"proof_packet":0,"proof_requested_callback":7,"proof_strategi":7,"propag":[4,5,6,7,10],"proper":2,"properli":2,"properti":[0,6,7],"proport":9,"propos":2,"protect":[2,10],"protocol":[2,3,4,5,6,11],"prove":[0,6,9],"prove_al":[0,7],"prove_app":7,"prove_non":7,"proven":[7,9],"provid":[0,2,3,4,5,6,7,9,10,11],"provis":[3,10],"prv_byte":7,"pseudo":10,"pub_byt":7,"public":[0,4,5,6,7,10],"public_inform":0,"publicli":[2,5,9,10],"publish":[2,4,5,7,9],"publish_blackhol":10,"publish_blackhole_en":7,"publish_ifac":5,"purchas":[2,9,11],"pure":[4,9],"purg":7,"purpos":[2,3,5,6,7,9,10],"put":[0,3,5,10],"py":[0,9,10],"py3":2,"pyca":[2,9],"pyseri":[0,2],"python":[0,4,5,7,9,10,11],"python3":[0,2,3],"q":[0,10],"qr":[2,6],"qualiti":[7,10],"quantiti":2,"quarter":2,"queri":[0,2,7,10],"question":[2,3,5],"queu":[7,10],"queue":[5,9],"quickli":[8,9,11],"quiet":[5,10],"quinc":0,"quirk":2,"quit":[0,2],"r":[0,5,9,10],"radio":[4,5,6,7,9,10,11],"radon":0,"rais":[0,7],"rak":3,"ram":[2,5],"randint":0,"random":[0,7,9],"random_text_gener":0,"randomis":9,"randomli":[0,9],"rang":[0,2,3,5,6,9,10,11],"rapidli":5,"rare":[2,5],"raspberri":[4,6,9,10,11],"rasperri":2,"ratchet":[7,9],"ratchet_count":7,"ratchet_expiri":7,"ratchet_id_receiv":7,"ratchet_interv":7,"ratchets":7,"ratchets_path":7,"rate":[0,4,7,10],"rather":[2,7],"ratio":7,"raw":[0,3,7],"rawchannelread":[4,7],"rawchannelwrit":[4,7],"rawiobas":7,"rb":0,"re":[0,5,6,7,9],"reach":[2,4,5,6,7,10],"reachabl":[0,2,5,6,7,9,10],"reachable_on":5,"read":[0,2,5,6,7,9,10],"read_loop":0,"readabl":[0,5,7,9,10],"reader":[0,7],"readi":[0,2,3,5,7,11],"readili":11,"ready_byt":[0,7],"ready_callback":7,"real":[2,3,5,6,11],"realiti":[2,8],"realli":[5,7],"reappear":5,"reason":[2,5,9,10],"reassembl":9,"reboot":2,"rebroadcast":6,"recal":[0,7,10],"recall_app_data":7,"recap":9,"receipt":[0,6,7,9],"receiv":[0,2,5,6,7,9,10],"receive_path_respons":7,"receive_stream_id":7,"received_announc":[0,7],"recent":[7,9],"recept":7,"reception_rssi":0,"reception_snr":0,"reception_stat":0,"recipi":9,"recogn":9,"recommend":[0,2,5,9],"recondit":10,"reconnect":[0,6],"reconnect_port":0,"reconstruct":9,"record":[2,9],"recoveri":5,"recreat":9,"recurs":[7,9],"reduc":[5,10],"redund":6,"refer":[0,2,4,5,10],"refresh":10,"refus":6,"regain":2,"regard":9,"region":5,"regist":[0,7,10],"register_announce_handl":[0,7],"register_message_typ":[0,7],"register_request_handl":[0,7],"regul":5,"regular":10,"rel":[3,5,6,9],"relai":2,"relat":2,"relationship":[6,9,10],"releas":[2,5,7,9],"relev":[0,2,3,5,7,9,10],"reli":[2,5,6,8,9,10],"reliabl":[2,3,5,6,7,9,11],"relianc":2,"relief":6,"reload":10,"rem":0,"remain":[5,6,7,9],"rememb":[6,7,9],"remot":[0,4,7,9],"remote_ident":[0,7],"remote_identifi":0,"remote_management_allow":10,"remote_management_en":7,"remote_p":0,"remotesensor":9,"remov":[7,10],"remove_message_handl":7,"remove_ready_callback":7,"render":2,"replac":[0,2,6,7,9,10],"repli":[0,10],"replic":[3,9],"reply_data":0,"reply_messag":0,"reply_text":0,"report":[5,7,8,10],"repositori":[2,8,9],"repres":[6,9],"represent":[0,7],"repurpos":2,"reput":[9,10],"request":[4,5,6,7,9,10,11],"request_destin":0,"request_fail":0,"request_id":[0,7],"request_packet":0,"request_path":[0,7],"request_receipt":[0,7],"request_receiv":0,"requested_at":[0,7],"requestexampl":0,"requestor":5,"requestreceipt":[4,7],"requir":[0,2,5,6,7,9,10,11],"require_shared_inst":7,"required_discovery_valu":[7,10],"resend":7,"reserv":[0,6,7],"resid":5,"resili":[2,6,10,11],"resist":6,"resolut":[2,5,9],"resolv":[4,5,6,9,10],"resourc":[0,2,4,5,6,7,8,10],"resource_callback":7,"resource_sending_conclud":0,"resource_strategi":7,"respawn":5,"respawn_delai":5,"respawn_interv":5,"respect":[5,6,11],"respond":[0,6,7,10],"respond_to_prob":10,"respons":[4,5,7,9,11],"response_callback":[0,7],"response_gener":[0,7],"rest":[6,11],"restart":[5,10],"restartsec":10,"restor":[2,5],"restrict":[5,6,10],"result":[0,2,5,9,10],"ret":[4,9],"retain":[5,7],"retained_ratchet":7,"reticulum":[0,5,6,7],"retransmiss":[6,9],"retransmit":[5,9],"retri":[0,7,9],"retriev":[7,10],"return":[0,5,7,10],"reveal":[2,7,9,11],"revers":10,"review":9,"revis":10,"rfe":10,"ridicul":9,"right":[2,5],"risc":4,"risk":9,"rmap":2,"rn":[0,2,3,7,9,10],"rncp":4,"rnid":[4,9],"rnode":[2,4,9,10,11],"rnodeconf":[3,4],"rnodef3b9":5,"rnodeinterfac":[2,3,5,10],"rnodemultiinterfac":5,"rnpath":[2,4,5],"rnprobe":[2,4],"rns_bin_dir":10,"rnsd":[2,4],"rnsh":[2,10],"rnspure":[2,9],"rnstatu":[2,4,5,9],"rnstransport":[5,10],"rnx":4,"roadmap":8,"roam":[5,6],"robot":9,"robust":[2,5],"role":6,"roll":5,"rom":10,"root":9,"rotat":[7,9,10],"round":[0,7,10],"rout":[2,3,5,6,7,9,10,11],"router":[2,5,6,10],"rpc":10,"rpc_kei":10,"rprogress":0,"rssi":[0,7,10],"rtsct":0,"rtt":[0,7,9],"rttstring":0,"rule":[2,4,5,6,10],"run":[0,2,3,5,6,7,9,10,11],"runtim":[0,9],"rust":2,"rx":[5,10],"rxb":0,"safe":9,"sai":2,"said":9,"same":[0,2,3,5,6,7,9,10],"satellit":6,"satisfi":9,"save":[7,9,10],"save_error":0,"saved_filenam":0,"scalabl":[10,11],"scale":[9,11],"scan":[2,5],"scenario":[2,5,9],"schedul":7,"scheme":[3,5],"scope":5,"scratch":3,"screen":0,"script":[2,3,5],"scrutini":9,"seamless":[5,9],"seamlessli":[5,6],"search":[4,7],"second":[0,5,6,7,9,10,11],"secreci":[5,7,9,11],"secret":[6,9],"section":[2,3,5,6,9,10],"secur":[2,4,6,9,10,11],"see":[0,2,5,6,7,9,10,11],"seek":9,"seen":[5,9],"segment":[0,2,5,6,7,9,10,11],"select":[0,2,5],"self":[0,2,9,11],"semtech":3,"send":[0,5,6,7,9,10],"send_stream_id":7,"sender":[0,2,6,9,10],"sens":6,"sensibl":[2,3,5],"sensor":[6,9],"sent":[0,2,6,7,9,10],"sentiment":9,"separ":[0,2,5,6,9,10],"sequenc":[0,7,9,11],"sequenti":11,"seri":3,"serial":[0,2,4,6,9,11],"serialinterfac":[3,5],"serv":[0,3,5,6,9,10],"serve_path":0,"server":[0,2,3,4,6,7,9,10],"server_buffer_readi":0,"server_callback":0,"server_client_connect":0,"server_destin":0,"server_fil":0,"server_ident":0,"server_link":0,"server_loop":0,"server_message_receiv":0,"server_packet_receiv":0,"servic":[2,4,5,6,9],"session":[2,9],"set":[0,2,3,5,6,7,9,10,11],"set_default_app_data":7,"set_delivery_callback":[0,7],"set_link_closed_callback":[0,7],"set_link_established_callback":[0,7],"set_packet_callback":[0,7],"set_proof_requested_callback":7,"set_proof_strategi":[0,7],"set_ratchet_interv":7,"set_remote_identified_callback":[0,7],"set_resource_callback":7,"set_resource_concluded_callback":[0,7],"set_resource_started_callback":[0,7],"set_resource_strategi":[0,7],"set_retained_ratchet":7,"set_timeout":[0,7],"set_timeout_callback":[0,7],"setup":[0,2,4,5,10],"sever":[2,6,7,10],"sf":10,"sh":5,"sha":[6,7,9],"sha256":[9,11],"shall":9,"shape":6,"share":[0,2,6,7,9,10],"share_inst":10,"shared_instance_port":10,"shared_instance_typ":[7,10],"shelf":[9,11],"shell":[4,10],"ship":[2,9],"shop":0,"short":[3,5,9,10],"shorter":5,"shorthand":[5,10],"shot":2,"should":[0,2,5,6,7,9,10,11],"should_ingress_limit":0,"should_quit":0,"should_use_implicit_proof":7,"show":[2,10],"shown":0,"side":[5,11],"sideband":[4,10],"sign":[5,6,7,9,10],"signal":[0,5,7,9],"signatur":[6,7,9,10,11],"signifi":9,"signific":6,"significantli":[5,7],"silent":10,"similar":[0,2,3,5,7,10,11],"simpl":[0,2,3,7,9,10,11],"simpler":[5,6,11],"simplest":[5,9],"simpli":[0,2,3,5,6,9,10],"simplic":9,"simplifi":0,"simplyequip":3,"simultan":[2,9],"sinc":[0,2,5,6,7,9],"singl":[0,2,5,6,7,9,10,11],"singular":9,"sit":2,"site":[5,6],"situat":[2,3,5,6,9,10],"size":[0,2,5,7,9,10],"size_str":0,"skip":0,"slate":2,"sleep":[0,2,10],"slice":0,"slightli":[0,2],"slottim":[5,10],"slow":[0,5,6,9],"slower":[5,7,9],"small":[0,2,5,6,7,9,11],"smaller":7,"smallest":2,"snippet":[2,10],"snr":[0,7,10],"so":[0,2,3,5,6,7,8,9,10,11],"social":2,"socket":[5,10,11],"softwar":[2,3,5,9],"sole":5,"solut":[2,9,10],"solv":9,"some":[0,2,3,5,6,7,9,10],"someon":[2,5,10],"someth":[6,9],"somethign":0,"sometim":[3,5],"somewhat":2,"soon":7,"sort":[5,9,10],"soundmodem":5,"sourc":[0,2,3,4,6,7,9,11],"sovereign":[2,9],"sovereignti":11,"space":[0,2,3,6,9,11],"spam":[2,5,9,10],"spammi":10,"span":[5,6,9],"spawn":5,"spe":5,"spec":9,"special":[9,10],"specif":[0,3,4,5,6,7,10],"specifi":[0,2,3,5,6,7,9,10],"spectrum":[5,9],"speed":[0,5,7,9,10],"split":0,"sponsor":8,"spread":[5,10],"spreadingfactor":5,"squelch":5,"ssh":2,"ssid":5,"stabil":6,"stabl":[2,5,6,9,11],"stack":[0,2,6,7,9,10,11],"stage":9,"stai":[0,9,10],"stale":[6,7],"stale_grac":7,"stale_tim":7,"stamp":[5,7,10],"standalon":4,"standard":[3,5,9,10],"start":[0,3,4,5,6,7,9,10],"startup":[0,2,10],"stat":[7,10],"state":[0,6],"static":[2,5,7],"staticmethod":0,"station":5,"stationari":[6,10],"statist":[0,5,7,8],"statu":[0,2,4,5,7,9,10],"stderr":10,"stdin":[5,10],"stdio":11,"stdout":[0,5,10],"step":[0,2,3],"still":[0,2,5,6,9,10],"stock":0,"stop":[7,11],"stopbit":[0,5,10],"storag":[2,5,9,10],"store":[0,7,9,10],"store_tru":0,"str":0,"straightforward":5,"strateg":6,"strategi":[4,5,7],"stream":[0,7,9],"stream_id":[0,7],"strength":[7,11],"strictli":[5,9],"string":[0,7],"stringmessag":0,"strong":9,"stronger":2,"strongli":2,"struct":0,"structur":[0,6,7,9,11],"style":5,"sub":[0,5],"subclass":[0,7],"subinterfac":5,"subject":[2,10,11],"subnet":[2,6],"subscrib":[2,10],"subsequ":[0,9],"subset":5,"subsid":5,"substanti":2,"succe":2,"succeed":[0,7],"succesfulli":6,"success":[2,5],"successful":7,"successfulli":[0,7,9],"sudo":[2,10],"suffer":6,"suffic":9,"suffici":[2,5,9,10],"suffix":0,"suggest":8,"suit":[2,3,9,10],"suitabl":[0,2,5,6,9,10,11],"super":0,"supersed":5,"suppli":[0,5,7,9,11],"supplier":2,"support":[0,2,4,5,6,7,9,10,11],"sure":[0,2,3,10],"surveil":9,"surviv":[2,9,10],"switch":[3,5,6,9,10],"sx1262":3,"sx1268":3,"sx1276":3,"sx1278":3,"sx1280":3,"sy":0,"symlink":10,"symmetr":[7,9],"system":[0,2,3,4,5,6,7,8,9,11],"systemctl":10,"systemd":10,"t":[0,2,5,6,7,9,10],"tabl":[2,5,6,9,10],"tablet":2,"tag":7,"tail":5,"tailor":9,"take":[0,2,5,9,10,11],"taken":[0,9],"tangerin":0,"tap":3,"target":[0,5,10],"target_hash":7,"target_host":[2,5],"target_port":[2,5,10],"task":10,"tcp":[2,3,4,6,9,10,11],"tcpclientinterfac":[2,3,5],"tcpinterfac":10,"tcpserverinterfac":[2,5],"tdata":0,"teach":10,"teardown":[0,7],"teardown_reason":0,"technologi":[2,6],"teffect":0,"telemetri":8,"tell":[0,2,5,6],"temperatur":9,"temporari":[2,5,10],"temporarili":[5,6],"ten":9,"tend":5,"term":[2,5,6,9],"termin":[0,2,7],"terminologi":[6,9],"termux":2,"test":[2,9,10],"testnet":[4,10],"text":[0,2,9],"tfile":0,"tgz":10,"than":[0,2,5,6,7,9,10,11],"thei":[0,2,5,6,7,9,10],"them":[0,2,3,5,6,8,9,10,11],"themselv":[5,6],"thereaft":9,"therefor":[2,9,11],"thi":[0,2,3,4,5,6,7,9,10,11],"thing":[0,2,6],"think":[2,3,6,9],"those":[2,6,9,10],"though":[2,5,6,9],"thousand":[2,5,9,10],"thread":0,"threat":10,"three":[2,9],"threshold":5,"throough":5,"throttl":[5,6],"through":[0,2,3,5,6,7,9,10,11],"throughout":[6,9],"throughput":[7,9,11],"thrown":7,"thu":[6,7,9],"ti":[0,6,9],"time":[0,2,3,5,6,7,9,10],"time_since_last":0,"timeout":[0,7,10],"timeoutarg":0,"timestamp":[0,9],"timestr":0,"tion":5,"tnc":[3,5,7,10,11],"to_fil":7,"todai":9,"togeth":[3,6,9,10],"token":[7,9,11],"toler":5,"too":[0,6],"tool":[2,3,6,9,10,11],"toolkit":[2,6],"top":9,"topic":9,"topographi":[2,6,9],"topologi":[2,5,6,9,11],"torn":[7,10],"total":[7,9,10,11],"total_s":0,"toward":[0,5,9],"track":7,"track_phy_stat":7,"trade":[6,9],"tradit":[6,9],"traffic":[0,2,5,6,7,9,10],"transceiv":[2,3,5,9,11],"transfer":[0,7,9,10,11],"transfer_s":0,"transform":11,"transit":2,"translat":6,"transmiss":[2,5,7,9],"transmit":[0,5,9],"transpar":[3,5,6,9,10],"transport":[0,2,4,5,7,10,11],"transport_en":7,"transport_ident":10,"travers":[2,7,9],"treat":[6,9],"tremend":6,"tri":0,"trip":[0,7,10],"trivial":[9,11],"true":[0,2,5,7,10],"truli":[3,9],"truncat":[7,9,10],"truncated_hash":7,"truncated_hashlength":[0,7],"trust":[2,5,6,9,10],"trustless":[4,9,11],"trustworthi":[6,10],"try":[0,4,5,6,7],"ttime":0,"ttransfer":0,"ttyacm0":5,"ttyusb0":[0,5,10],"ttyusb1":5,"ttyusb2":5,"tun":[3,5],"tun0":5,"tune":5,"tunnel":[2,5,6,9,11],"tupl":7,"turn":[0,5,10],"turnaround":5,"tutori":2,"two":[0,3,5,6,7,9],"tx":[5,10],"txb":0,"txp":10,"txpower":5,"txt":10,"txtail":[5,10],"type":[0,2,4,5,6,7,10],"typeerror":7,"typic":[5,6,9],"u":[8,9,10],"ubiqu":3,"ubuntu":[4,10],"uci":2,"udp":[4,6,9,10,11],"udpinterfac":5,"uhf":[10,11],"ultim":[2,9],"umsgpack":0,"unblackhol":10,"unblock":10,"uncencrypt":0,"uncensor":2,"unchang":6,"under":[7,8,9,10,11],"underli":[0,5,6,7,9,11],"understand":[2,4,5,6,7,10],"underwai":2,"unencrypt":[0,7,9],"unequivoc":9,"unexplor":6,"unforg":[6,11],"unfortun":2,"unidentifi":0,"unidirect":0,"unifi":[6,9],"uninterest":0,"uniqu":[0,5,6,7,9,10,11],"unit":[0,2,7,10],"unknown":[0,5,6,7,9,10],"unless":[0,2,5,6,7,9],"unlicens":9,"unlik":9,"unlock":10,"unorganis":6,"unpack":[0,7],"unpackb":0,"unplug":10,"unrecover":[0,10],"unreli":5,"unset":9,"unsupport":7,"until":[0,2,5,7],"untrust":10,"unus":10,"unwant":[9,10],"up":[0,2,3,5,6,7,9,10,11],"updat":[0,2,7,9,10],"upgrad":[2,7,9],"upkeep":5,"upon":[0,5,9],"upset":0,"urandom":[9,11],"url":10,"us":[0,3,4,5,6,7],"usabl":[2,5,9],"usag":[4,5,7,8,10],"usb":[3,9,10],"useabl":9,"user":[0,2,5,6,9,10,11],"user_input":0,"userland":11,"usernameher":10,"usr":[5,10],"usual":[2,5,6],"utf":0,"util":[0,3,4,5,9],"utilis":[0,2,5,7,9,10,11],"v":[4,10],"valid":[0,2,5,6,7,9,10],"valu":[0,2,5,7,9,10],"valuabl":[3,8],"valueerror":[0,7],"vari":[2,5,9,10],"variabl":[0,2,7],"varieti":[5,9,10,11],"variou":[0,2,5,6,9,10,11],"vast":[2,9],"vastli":6,"ve":6,"vehicl":5,"vendor":[0,3,11],"verbos":[7,10],"veri":[2,3,5,6,7,8,9,10,11],"verif":[6,7,9,10],"verifi":[0,2,5,6,7,9,10,11],"versa":11,"version":[0,2,7,9,10],"vhf":[9,11],"via":[2,3,5,6,8,9,10,11],"viabl":6,"vice":11,"view":[2,5,9,10],"violat":5,"virtual":[2,3,5,6,9,10,11],"visibl":[0,5],"volunt":2,"vpn":6,"vport":5,"vulner":6,"vvv":2,"w":10,"wa":[0,3,5,6,7,9,10,11],"wai":[0,4,5,6,7,9,10],"wait":[0,2,5,9,10],"want":[0,2,5,6,9,10],"wantedbi":10,"warn":10,"warrant":11,"wast":[5,6],"wave":3,"wb":0,"we":[0,2,3,5,6,8,9],"weaken":9,"web":2,"websit":[2,5],"weight":10,"welcom":2,"well":[2,3,5,6,7,9,10,11],"went":0,"were":0,"what":[0,2,4,5,6,7,9,10],"whatev":[6,7,9],"wheel":2,"when":[0,2,3,5,6,7,9,10],"whenev":[0,7,9],"where":[2,3,4,5,6,7,9,10],"whereupon":9,"whether":[0,2,5,6,7,9],"which":[0,2,5,6,7,9,10],"while":[0,2,3,5,6,7,9,10,11],"whitelist":9,"whl":2,"who":[2,5,6,9,10],"whole":10,"wide":[2,3,5,6,9,10,11],"wider":[2,5,6,9,10],"wifi":[2,4,5,6,9,10,11],"wiki":2,"wildcard":0,"willing":10,"window":[4,5],"wipe":10,"wire":[2,3,4,5,11],"wireless":[3,6],"wirelessli":5,"wish":[0,5,9,10],"within":[0,2,5,6,7,9],"without":[0,2,3,5,6,9,10,11],"wlan0":5,"wolf":3,"won":0,"word":2,"work":[2,3,5,6,9,10,11],"workabl":6,"world":[2,3,5,6,10,11],"worri":6,"worth":2,"would":[2,5,7,9],"write":[0,2,3,5,7,9,10],"write_timeout":0,"writer":[0,7],"written":[0,9,11],"wrong":[0,2,5],"wrote":[0,5],"x":[7,9,10],"x25519":[9,11],"xenon":0,"xonxoff":0,"y":0,"ye":[2,5,9,10],"year":9,"yet":[0,5,9,11],"yggdrasil":5,"yi":0,"you":[0,2,3,4,5,6,7,8,9,10,11],"your":[0,3,4,5,6,7,8,9,11],"yourself":[2,9,10,11],"z":0,"zero":[5,7,11],"zi":0,"zone":9,"zshrc":2},"titles":["Code Examples","An Explanation of Reticulum for Human Beings","Getting Started Fast","Communications Hardware","Reticulum Network Stack Manual","Configuring Interfaces","Building Networks","API Reference","Support Reticulum","Understanding Reticulum","Using Reticulum on Your System","What is Reticulum?"],"titleterms":{"0":3,"1":3,"25":5,"Beings":1,"Not":6,"Of":4,"The":[9,10],"With":2,"access":9,"ad":2,"address":6,"an":1,"android":2,"announc":[0,5,9],"api":7,"arm64":2,"auto":5,"autom":10,"ax":5,"backbon":5,"base":[2,3],"basic":9,"beam":3,"blackhol":10,"board":3,"bookworm":2,"bootstrap":2,"broadcast":0,"buffer":0,"build":[2,6],"can":11,"caveat":11,"channel":0,"client":5,"code":[0,8,9],"combin":3,"common":5,"commun":3,"concept":6,"conceptu":9,"configur":[5,10],"connect":[2,5,6],"consider":[5,6],"content":4,"contribut":[2,8],"control":5,"creat":[2,3,9],"cryptograph":9,"current":[9,11],"custom":[0,2,5],"data":10,"debian":2,"deck":3,"depend":2,"destin":[5,6,9],"detail":9,"develop":2,"devic":[3,11],"discov":10,"discover":5,"discoveri":5,"doe":11,"donat":8,"echo":[0,3],"emptor":11,"enabl":5,"entrypoint":2,"establish":9,"ethernet":3,"exampl":[0,5],"explan":1,"fast":2,"feedback":8,"filetransf":0,"find":2,"fix":10,"format":9,"function":9,"further":9,"futur":9,"get":[2,9],"global":2,"goal":9,"hardwar":3,"health":2,"heltec":3,"heterogen":6,"host":2,"human":1,"i":11,"i2p":5,"ident":9,"identif":0,"implic":9,"improv":10,"includ":[2,10],"indic":4,"infrastructur":2,"instal":[2,3],"instanc":[2,6],"interfac":[0,2,5,9,10,11],"internet":2,"introduct":9,"introductori":6,"issu":2,"kei":9,"kiss":5,"lilygo":3,"limit":5,"line":3,"link":[0,9],"list":10,"listen":5,"local":10,"lora":5,"lora32":3,"lunar":2,"maco":2,"manag":10,"manual":4,"mechan":9,"meshchat":2,"minim":0,"mix":2,"mode":5,"modem":3,"motiv":9,"multi":5,"name":[9,10],"network":[2,4,6,9],"new":5,"node":[6,9],"nomad":2,"note":2,"offer":11,"opencom":3,"openwrt":2,"option":5,"over":2,"overview":[6,9],"packet":[3,9],"paramet":5,"person":2,"pi":2,"pipe":5,"platform":2,"port":10,"primit":9,"prioritis":9,"program":[2,10],"propag":9,"protocol":9,"provid":8,"public":[2,9],"publish":10,"pure":2,"python":2,"radio":[2,3],"rak4631":3,"raspberri":2,"rate":5,"reach":9,"refer":[7,9],"remot":[2,5,10],"request":0,"resolv":2,"resourc":9,"respons":[0,2],"ret":2,"reticulum":[1,2,3,4,8,9,10,11],"risc":2,"rncp":10,"rnid":10,"rnode":[3,5],"rnodeconf":10,"rnpath":10,"rnprobe":10,"rnsd":10,"rnstatu":10,"rnx":10,"rule":9,"secur":5,"serial":[3,5,10],"server":5,"servic":10,"setup":9,"shell":2,"sideband":2,"sourc":10,"specif":[2,9],"stack":4,"standalon":2,"start":2,"statu":11,"strategi":2,"support":[3,8],"suprem":3,"system":10,"systemwid":10,"t":3,"t114":3,"t3s3":3,"tabl":4,"tcp":5,"testnet":2,"transport":[6,9],"trustless":6,"try":2,"type":[3,9,11],"ubuntu":2,"udp":5,"understand":9,"unsign":3,"us":[2,9,10,11],"usag":[3,9],"userspac":10,"util":[2,10],"v":2,"v1":3,"v2":3,"v3":3,"v4":3,"wai":2,"what":11,"where":11,"wifi":3,"window":2,"wire":9,"x":3,"xl":3,"your":[2,10]}})
\ No newline at end of file
diff --git a/docs/manual/support.html b/docs/manual/support.html
index 9eff190..7e72c5f 100644
--- a/docs/manual/support.html
+++ b/docs/manual/support.html
@@ -7,7 +7,7 @@
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
- <title>Support Reticulum - Reticulum Network Stack 1.0.5 documentation</title>
+ <title>Support Reticulum - Reticulum Network Stack 1.1.0 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
@@ -180,7 +180,7 @@
</label>
</div>
<div class="header-center">
- <a href="index.html"><div class="brand">Reticulum Network Stack 1.0.5 documentation</div></a>
+ <a href="index.html"><div class="brand">Reticulum Network Stack 1.1.0 documentation</div></a>
</div>
<div class="header-right">
<div class="theme-toggle-container theme-toggle-header">
@@ -204,7 +204,7 @@
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
</div>
- <span class="sidebar-brand-text">Reticulum Network Stack 1.0.5 documentation</span>
+ <span class="sidebar-brand-text">Reticulum Network Stack 1.1.0 documentation</span>
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
@@ -368,7 +368,7 @@ report issues, suggest functionality and contribute code to Reticulum.</p>
</aside>
</div>
-</div><script src="_static/documentation_options.js?v=d55fa986"></script>
+</div><script src="_static/documentation_options.js?v=fc837d61"></script>
<script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
diff --git a/docs/manual/understanding.html b/docs/manual/understanding.html
index ba22fea..981deb5 100644
--- a/docs/manual/understanding.html
+++ b/docs/manual/understanding.html
@@ -7,7 +7,7 @@
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
- <title>Understanding Reticulum - Reticulum Network Stack 1.0.5 documentation</title>
+ <title>Understanding Reticulum - Reticulum Network Stack 1.1.0 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
@@ -180,7 +180,7 @@
</label>
</div>
<div class="header-center">
- <a href="index.html"><div class="brand">Reticulum Network Stack 1.0.5 documentation</div></a>
+ <a href="index.html"><div class="brand">Reticulum Network Stack 1.1.0 documentation</div></a>
</div>
<div class="header-right">
<div class="theme-toggle-container theme-toggle-header">
@@ -204,7 +204,7 @@
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
</div>
- <span class="sidebar-brand-text">Reticulum Network Stack 1.0.5 documentation</span>
+ <span class="sidebar-brand-text">Reticulum Network Stack 1.1.0 documentation</span>
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
@@ -873,6 +873,66 @@ of codes to reliably transfer any amount of data. They can be used to transfer d
or stream data directly from files.</p>
</section>
</section>
+<section id="network-identities">
+<span id="understanding-network-identities"></span><h2>Network Identities<a class="headerlink" href="#network-identities" title="Link to this heading">¶</a></h2>
+<p>In Reticulum, every peer and application utilizes a cryptographic <strong>Identity</strong> to verify authenticity and establish encrypted channels. While standard identities are typically used to represent a single user, device, or service, Reticulum introduces the concept of a <strong>Network Identity</strong> to represent a logical group of nodes or an entire community infrastructure.</p>
+<p>A Network Identity is, at its core, a standard Reticulum Identity keyset. However, its purpose and usage differ from a personal identity. Instead of identifying a single entity, a Network Identity acts as a shared credential that federates multiple independent Transport Instances under a single, verifiable administrative domain.</p>
+<section id="conceptual-overview">
+<h3>Conceptual Overview<a class="headerlink" href="#conceptual-overview" title="Link to this heading">¶</a></h3>
+<p>You can think of a standard Reticulum Identity as a self-sovereign, privately created passport for a single person. A Network Identity, conversely, is akin to a cryptographic flag, or a charter that flies over a fleet of ships. It signifies that while the ships may operate independently and be physically distant, they belong to the same organization, follow the same protocols, and are expected to act in concert.</p>
+<p>When you configure a Network Identity on one or more of your nodes, you are effectively declaring that these nodes constitute a specific “network” within a broader Reticulum mesh. This allows other peers to recognize interfaces not just as “a node named Alice”, but as “a gateway belonging to The Eastern Ret Of Freedom”.</p>
+</section>
+<section id="current-usage">
+<h3>Current Usage<a class="headerlink" href="#current-usage" title="Link to this heading">¶</a></h3>
+<p>At present, the primary function of a Network Identity is within the <a class="reference internal" href="using.html#using-interface-discovery"><span class="std std-ref">Interface Discovery</span></a> system.</p>
+<p>When a Transport Instance broadcasts a discovery announce for an interface, it can optionally sign that announce with a Network Identity, instead of just its local transport identity. Remote peers receiving the announce can then verify the signature. This provides functionality for two important distinctions:</p>
+<ol class="arabic simple">
+<li><p><strong>Authenticity:</strong> It proves that the interface was published by an operator who possesses the private key for that Network Identity.</p></li>
+<li><p><strong>Trust Boundaries:</strong> It allows users to configure their systems to only accept and connect to interfaces that belong to specific Network Identities, effectively creating “whitelisted” zones of trusted infrastructure.</p></li>
+</ol>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>If you enable encryption on your discovery announces, the Network Identity is used as the shared secret. Only peers who have been explicitly provided with the Network Identity’s full keyset (and have it configured locally) will be able to decrypt and utilize the connection details.</p>
+<p>This functionality will be expanded in the future, so that peers with delegated keys can be allowed to decrypt discovery announces without holding the root network key. Currently, the functionality is sufficient for sharing interface information privately where you control all nodes that must decrypt the discovered interfaces.</p>
+</div>
+</section>
+<section id="future-implications">
+<h3>Future Implications<a class="headerlink" href="#future-implications" title="Link to this heading">¶</a></h3>
+<p>While the current implementation focuses on interface discovery, the concept of Network Identities serves as the foundational building block for future Reticulum features designed to support large-scale, organic mesh formation.</p>
+<p>As the ecosystem evolves, Network Identities will facilitate:</p>
+<ul class="simple">
+<li><p><strong>Distributed Name Resolution:</strong> A system where networks can publish name-to-identity mappings, allowing human-readable names to resolve without centralized servers.</p></li>
+<li><p><strong>Service Publishing:</strong> Networks will be able to announce specific capabilities, services, or information endpoints available publicly or to their members.</p></li>
+<li><p><strong>Inter-Network Federation:</strong> Trust relationships between different networks, allowing for seamless but managed flow of traffic and information across distinct administrative boundaries.</p></li>
+<li><p><strong>Distributed Blackhole Management:</strong> A reputation-based system for blackhole list distribution, where trusted Network Identities can sign and publish lists of blackholed identities. This allows communities to collaboratively enforce security standards and filter spam or malicious identities across the parts of the wider mesh that they are responsible for.</p></li>
+</ul>
+<p>By adopting the use of Network Identities now, you are preparing your infrastructure to be compatible with this future functionality.</p>
+</section>
+<section id="creating-and-using-a-network-identity">
+<h3>Creating and Using a Network Identity<a class="headerlink" href="#creating-and-using-a-network-identity" title="Link to this heading">¶</a></h3>
+<p>Since a Network Identity is simply a standard Reticulum Identity, you create one using the built-in tools.</p>
+<ol class="arabic">
+<li><p><strong>Generate the Identity:</strong>
+Use the <code class="docutils literal notranslate"><span class="pre">rnid</span></code> utility to generate a new identity file that will serve as your Network Identity.</p>
+<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span>rnid<span class="w"> </span>-g<span class="w"> </span>~/.reticulum/storage/identities/my_network
+</pre></div>
+</div>
+</li>
+<li><p><strong>Distribute the Public Key:</strong>
+The public key must be distributed to any Transport Instance that needs to verify your network’s announces and discovery information. By default, if your node is set up to use a network identity, this happens automatically (using the standard announce mechanism).</p></li>
+<li><p><strong>Configure Instances:</strong>
+In the <code class="docutils literal notranslate"><span class="pre">[reticulum]</span></code> section of the configuration file on every node within your network, point the <code class="docutils literal notranslate"><span class="pre">network_identity</span></code> option to the file you created.</p>
+<div class="highlight-ini notranslate"><div class="highlight"><pre><span></span><span class="k">[reticulum]</span>
+<span class="na">...</span>
+<span class="na">network_identity</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">~/.reticulum/storage/identities/my_network</span>
+<span class="na">...</span>
+</pre></div>
+</div>
+</li>
+</ol>
+<p>Once configured, your instances will automatically utilize this identity for signing discovery announces (and potentially decrypting network-private information), presenting a unified front to the wider network.</p>
+</section>
+</section>
<section id="reference-setup">
<span id="understanding-referencesystem"></span><h2>Reference Setup<a class="headerlink" href="#reference-setup" title="Link to this heading">¶</a></h2>
<p>This section will detail a recommended <em>Reference Setup</em> for Reticulum. It is important to
@@ -1247,6 +1307,13 @@ those risks are acceptable to you.</p>
<li><a class="reference internal" href="#resources">Resources</a></li>
</ul>
</li>
+<li><a class="reference internal" href="#network-identities">Network Identities</a><ul>
+<li><a class="reference internal" href="#conceptual-overview">Conceptual Overview</a></li>
+<li><a class="reference internal" href="#current-usage">Current Usage</a></li>
+<li><a class="reference internal" href="#future-implications">Future Implications</a></li>
+<li><a class="reference internal" href="#creating-and-using-a-network-identity">Creating and Using a Network Identity</a></li>
+</ul>
+</li>
<li><a class="reference internal" href="#reference-setup">Reference Setup</a></li>
<li><a class="reference internal" href="#protocol-specifics">Protocol Specifics</a><ul>
<li><a class="reference internal" href="#packet-prioritisation">Packet Prioritisation</a></li>
@@ -1267,7 +1334,7 @@ those risks are acceptable to you.</p>
</aside>
</div>
-</div><script src="_static/documentation_options.js?v=d55fa986"></script>
+</div><script src="_static/documentation_options.js?v=fc837d61"></script>
<script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
diff --git a/docs/manual/using.html b/docs/manual/using.html
index 536a846..6f683aa 100644
--- a/docs/manual/using.html
+++ b/docs/manual/using.html
@@ -7,7 +7,7 @@
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
- <title>Using Reticulum on Your System - Reticulum Network Stack 1.0.5 documentation</title>
+ <title>Using Reticulum on Your System - Reticulum Network Stack 1.1.0 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
@@ -180,7 +180,7 @@
</label>
</div>
<div class="header-center">
- <a href="index.html"><div class="brand">Reticulum Network Stack 1.0.5 documentation</div></a>
+ <a href="index.html"><div class="brand">Reticulum Network Stack 1.1.0 documentation</div></a>
</div>
<div class="header-right">
<div class="theme-toggle-container theme-toggle-header">
@@ -204,7 +204,7 @@
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
</div>
- <span class="sidebar-brand-text">Reticulum Network Stack 1.0.5 documentation</span>
+ <span class="sidebar-brand-text">Reticulum Network Stack 1.1.0 documentation</span>
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
@@ -554,8 +554,8 @@ Reticulum Transport Instance <5245a8efe1788c6a1cd36144a270e13b> running
</div>
<p><strong>All Command-Line Options</strong></p>
<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>usage: rnstatus [-h] [--config CONFIG] [--version] [-a] [-A]
- [-l] [-s SORT] [-r] [-j] [-R hash] [-i path]
- [-w seconds] [-v] [-m] [-mi seconds] [filter]
+ [-l] [-t] [-s SORT] [-r] [-j] [-R hash] [-i path]
+ [-w seconds] [-d] [-D] [-m] [-I seconds] [-v] [filter]
Reticulum Network Stack Status
@@ -569,16 +569,20 @@ options:
-a, --all show all interfaces
-A, --announce-stats show announce stats
-l, --link-stats show link stats
- -s SORT, --sort SORT sort interfaces by [rate, traffic, rx, tx, announces, arx, atx, held]
+ -t, --totals display traffic totals
+ -s, --sort SORT sort interfaces by [rate, traffic, rx, tx, rxs, txs,
+ announces, arx, atx, held]
-r, --reverse reverse sorting
-j, --json output in JSON format
- -R hash transport identity hash of remote instance to get status from (requires -i)
+ -R hash transport identity hash of remote instance to get status from
-i path path to identity used for remote management
-w seconds timeout before giving up on remote queries
- -v, --verbose
+ -d, --discovered list discovered interfaces
+ -D show details and config entries for discovered interfaces
-m, --monitor continuously monitor status
- -I seconds, --monitor-interval seconds
+ -I, --monitor-interval seconds
refresh interval for monitor mode (default: 1)
+ -v, --verbose
</pre></div>
</div>
<div class="admonition note">
@@ -670,7 +674,7 @@ options:
</div>
</section>
<section id="the-rnpath-utility">
-<h3>The rnpath Utility<a class="headerlink" href="#the-rnpath-utility" title="Link to this heading">¶</a></h3>
+<span id="utility-rnpath"></span><h3>The rnpath Utility<a class="headerlink" href="#the-rnpath-utility" title="Link to this heading">¶</a></h3>
<p>With the <code class="docutils literal notranslate"><span class="pre">rnpath</span></code> utility, you can look up and view paths for
destinations on the Reticulum network.</p>
<p><strong>Usage Examples</strong></p>
@@ -681,21 +685,23 @@ Path found, destination <c89b4da064bf66d280f0e4d8abfd9806> is 4 hops away
</pre></div>
</div>
<p><strong>All Command-Line Options</strong></p>
-<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>usage: rnpath [-h] [--config CONFIG] [--version] [-t] [-m hops]
- [-r] [-d] [-D] [-x] [-w seconds] [-R hash] [-i path]
- [-W seconds] [-j] [-v] [destination]
+<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>usage: rnpath [-h] [--config CONFIG] [--version] [-t] [-m hops] [-r] [-d] [-D]
+ [-x] [-w seconds] [-R hash] [-i path] [-W seconds] [-b] [-B] [-U]
+ [--duration DURATION] [--reason REASON] [-p] [-j] [-v]
+ [destination] [list_filter]
-Reticulum Path Discovery Utility
+Reticulum Path Management Utility
positional arguments:
destination hexadecimal hash of the destination
+ list_filter filter for remote blackhole list view
options:
-h, --help show this help message and exit
--config CONFIG path to alternative Reticulum config directory
--version show program's version number and exit
-t, --table show all known paths
- -m hops, --max hops maximum hops to filter path table by
+ -m, --max hops maximum hops to filter path table by
-r, --rates show announce rate info
-d, --drop remove the path to a destination
-D, --drop-announces drop all queued announces
@@ -704,6 +710,13 @@ options:
-R hash transport identity hash of remote instance to manage
-i path path to identity used for remote management
-W seconds timeout before giving up on remote queries
+ -b, --blackholed list blackholed identities
+ -B, --blackhole blackhole identity
+ -U, --unblackhole unblackhole identity
+ --duration DURATION duration of blackhole enforcement in hours
+ --reason REASON reason for blackholing identity
+ -p, --blackholed-list
+ view published blackhole list for remote transport instance
-j, --json output in JSON format
-v, --verbose
</pre></div>
@@ -972,6 +985,87 @@ options:
section of this manual.</p>
</section>
</section>
+<section id="discovering-interfaces">
+<span id="using-interface-discovery"></span><h2>Discovering Interfaces<a class="headerlink" href="#discovering-interfaces" title="Link to this heading">¶</a></h2>
+<p>Reticulum includes built-in functionality for discovering connectable interfaces over Reticulum itself. This is particularly useful in situations where you want to do one or more of the following:</p>
+<ul class="simple">
+<li><p>Discover connectable entrypoints available on the Internet</p></li>
+<li><p>Find connectable radio access points in the physical world</p></li>
+<li><p>Maintain connectivity to RNS instances with unknown or changing IP addresses</p></li>
+</ul>
+<p>Discovered interfaces can be <strong>auto-connected</strong> by Reticulum, which makes it possible to create setups where an arbitrary interface can act simply as a bootstrap connection, that can be torn down again once more suitable interfaces have been discovered and connected.</p>
+<p>The interface discovery mechanism uses announces sent over Reticulum itself, and supports both publicly readable interfaces and private, encrypted discovery, that can only be decoded by specified <em>network identities</em>. It is also possible to specify which network identities should be considered valid sources for discovered interfaces, so that interfaces published by unknown entities are ignored.</p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>A <em>network identity</em> is a normal Reticulum identity keyset that can be used by
+one or more transport nodes to identify them as belonging to the same overall
+network. In the context of interface discovery, this makes it easy to manage
+connecting to only the particular networks you care about, even if those networks
+utilize many individual physical transport node.</p>
+<p>This also makes it convenient to auto-connect discovered interfaces only for networks you have some level of trust in.</p>
+</div>
+<p>For information on how to make your interfaces discoverable, see the <a class="reference internal" href="interfaces.html#interfaces-discoverable"><span class="std std-ref">Discoverable Interfaces</span></a> chapter of this manual. The current section will focus on how to actually <em>discover and connect to</em> interfaces available on the network.</p>
+<p>In its most basic form, enabling interface discovery is as simple as setting <code class="docutils literal notranslate"><span class="pre">discover_interfaces</span></code> to <code class="docutils literal notranslate"><span class="pre">true</span></code> in your Reticulum config:</p>
+<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>[reticulum]
+...
+discover_interfaces = yes
+...
+</pre></div>
+</div>
+<p>Once this option is enabled, your RNS instance will start listening for interface discovery announces, and store them for later use or inspection. You can list discovered interfaces with the <code class="docutils literal notranslate"><span class="pre">rnstatus</span></code> utility:</p>
+<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>$ rnstatus -d
+
+Name Type Status Last Heard Value Location
+-------------------------------------------------------------------------
+Sideband Hub Backbone ✓ Available 1h ago 16 46.2316, 6.0536
+RNS Amsterdam Backbone ✓ Available 32m ago 16 52.3865, 4.9037
+</pre></div>
+</div>
+<p>You can view more detailed information about discovered interfaces, including configuration snippets for pasting directly into your <code class="docutils literal notranslate"><span class="pre">[interfaces]</span></code> config, by using the <code class="docutils literal notranslate"><span class="pre">rnstatus</span> <span class="pre">-D</span></code> option:</p>
+<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>$ rnstatus -D sideband
+
+Transport ID : 521c87a83afb8f29e4455e77930b973b
+Name : Sideband Hub
+Type : BackboneInterface
+Status : Available
+Transport : Enabled
+Distance : 2 hops
+Discovered : 9h and 40m ago
+Last Heard : 1h and 15m ago
+Location : 46.2316, 6.0536
+Address : sideband.connect.reticulum.network:7822
+Stamp Value : 16
+
+Configuration Entry:
+ [[Sideband Hub]]
+ type = BackboneInterface
+ enabled = yes
+ remote = sideband.connect.reticulum.network
+ target_port = 7822
+ transport_identity = 521c87a83afb8f29e4455e77930b973b
+</pre></div>
+</div>
+<p>In addition to providing local interface discovery information and control, the <code class="docutils literal notranslate"><span class="pre">rnstatus</span></code> utility can export discovered interface data in machine-readable JSON format using the <code class="docutils literal notranslate"><span class="pre">rnstatus</span> <span class="pre">-d</span> <span class="pre">--json</span></code> option. This can be useful for exporting the data to external applications such as status pages, access point maps and similar.</p>
+<p>To control what sources are considered valid for discovered sources, additional
+configuration options can be specified for the interface discovery system.</p>
+<ul class="simple">
+<li><p>The <code class="docutils literal notranslate"><span class="pre">interface_discovery_sources</span></code> option is a list of the network or transport identities from which interfaces will be accepted. If this option is set, all others will be ignored. If this option is not set, discovered interfaces will be accepted from any source, but are still subject to stamp value requirements.</p></li>
+<li><p>The <code class="docutils literal notranslate"><span class="pre">required_discovery_value</span></code> options specifies the minimum stamp value required for the interface announce to be considered valid. To make it computationally difficult to spam the network with a large number of defunct or malicious interfaces, each announced interface requires a valid cryptographical stamp, of configurable difficulty value.</p></li>
+<li><p>The <code class="docutils literal notranslate"><span class="pre">autoconnect_discovered_interfaces</span></code> value defaults to <code class="docutils literal notranslate"><span class="pre">0</span></code>, and specifies the maximum number of discovered interfaces that should be auto-connected at any given time. If set to a number greater than <code class="docutils literal notranslate"><span class="pre">0</span></code>, Reticulum automatically manages discovered interface connections, and will bring discovered interfaces up and down based on availability. You can at any time add discovered interfaces to your configuration manually, to persistently keep them available.</p></li>
+<li><p>The <code class="docutils literal notranslate"><span class="pre">network_identity</span></code> option specifies the <em>network identity</em> for this RNS instance. This identity is used both to sign (and potentially encrypt) <em>outgoing</em> interface discovery announces, and to decrypt incoming discovery information.</p></li>
+</ul>
+<p>The configuration snippet below contains an example of setting these additional configuration options:</p>
+<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>[reticulum]
+...
+discover_interfaces = yes
+interface_discovery_sources = 521c87a83afb8f29e4455e77930b973b
+required_discovery_value = 16
+autoconnect_discovered_interfaces = 3
+network_identity = ~/.reticulum/storage/identities/my_network
+...
+</pre></div>
+</div>
+</section>
<section id="remote-management">
<h2>Remote Management<a class="headerlink" href="#remote-management" title="Link to this heading">¶</a></h2>
<p>It is possible to allow remote management of Reticulum
@@ -993,6 +1087,98 @@ remote_management_allowed = 9fb6d773498fb3feda407ed8ef2c3229, 2d882c5586e548d79b
</div>
<p>For a complete example configuration, you can run <code class="docutils literal notranslate"><span class="pre">rnsd</span> <span class="pre">--exampleconfig</span></code>.</p>
</section>
+<section id="blackhole-management">
+<span id="using-blackhole-management"></span><h2>Blackhole Management<a class="headerlink" href="#blackhole-management" title="Link to this heading">¶</a></h2>
+<p>Reticulum networks are fundamentally permissionless and open, allowing anyone with a compatible interface to participate. While this openness is essential for a resilient and decentralized network, it also exposes the network to potential abuse, such as peers flooding the network with excessive announce broadcasts or other forms of resource exhaustion.</p>
+<p>The <strong>Blackhole</strong> system provides tools to help manage this problem. It allows operators and individual users to block specific identities at the Transport layer, preventing them from propagating announces through your node, and for other nodes to reach them through your network.</p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>There is fundamentally <strong>no way</strong> to <em>globally</em> block or censor any identity or destination in Reticulum networks. The blackhole functionality will prevent announces from (and traffic to) all destinations associated with the blackholed identity <em>on your own network segments only</em>.</p>
+<p>This provides users and operators with control over what they want to allow <em>on their own network segments</em>, but there is no way to globally censor or remove an identity, as long as <em>someone</em> is willing to provide transport for it.</p>
+</div>
+<p>This functionality serves a dual purpose:</p>
+<ul class="simple">
+<li><p><strong>For Individual Users:</strong> It offers a simple way to maintain a quiet and efficient local network by manually blocking spammy or unwanted peers.</p></li>
+<li><p><strong>For Network Operators:</strong> It enables the creation of federated, community-wide security standards. By publishing and sharing blackhole lists, operators can protect large infrastructures and distribute spam filtering rules across the mesh without manual intervention.</p></li>
+</ul>
+<section id="local-blackhole-management">
+<h3>Local Blackhole Management<a class="headerlink" href="#local-blackhole-management" title="Link to this heading">¶</a></h3>
+<p>The most immediate way to manage unwanted identities is through manual configuration using the <code class="docutils literal notranslate"><span class="pre">rnpath</span></code> utility. This allows you to instantly block or unblock specific identities on your local Transport Instance.</p>
+<p><strong>Blackholing an Identity</strong></p>
+<p>To block an identity, use the <code class="docutils literal notranslate"><span class="pre">-B</span></code> (or <code class="docutils literal notranslate"><span class="pre">--blackhole</span></code>) flag followed by the identity hash. You can optionally specify a duration and a reason, which are useful for logging and future reference.</p>
+<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>$ rnpath -B 3a4f8b9c1d2e3f4g5h6i7j8k9l0m1n2o
+</pre></div>
+</div>
+<p>You can also add a duration (in hours) and a reason:</p>
+<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>$ rnpath -B 3a4f8b9c1d2e3f4g5h6i7j8k9l0m1n2o --duration 24 --reason "Excessive announces"
+</pre></div>
+</div>
+<p><strong>Lifting Blackholes</strong></p>
+<p>To remove an identity from the blackhole, use the <code class="docutils literal notranslate"><span class="pre">-U</span></code> (or <code class="docutils literal notranslate"><span class="pre">--unblackhole</span></code>) flag:</p>
+<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>$ rnpath -U 3a4f8b9c1d2e3f4g5h6i7j8k9l0m1n2o
+</pre></div>
+</div>
+<p><strong>Viewing the Blackhole List</strong></p>
+<p>To see all identities currently blackholed on your local instance, use the <code class="docutils literal notranslate"><span class="pre">-b</span></code> (or <code class="docutils literal notranslate"><span class="pre">--blackholed</span></code>) flag:</p>
+<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>$ rnpath -b
+
+<3a4f8b9c1d2e3f4g5h6i7j8k9l0m1n2o> blackholed for 23h, 56m (Excessive announces)
+<399ea050ce0eed1816c300bcb0840938> blackholed indefinitely (Announce spam)
+<d56a4fa02c0a77b3575935aedd90bdb2> blackholed indefinitely (Announce spam)
+<2b9ec651326d9bc274119054c70fb75e> blackholed indefinitely (Announce spam)
+<1178a8f1fad405bf2ad153bf5036bdfd> blackholed indefinitely (Announce spam)
+</pre></div>
+</div>
+</section>
+<section id="automated-list-sourcing">
+<h3>Automated List Sourcing<a class="headerlink" href="#automated-list-sourcing" title="Link to this heading">¶</a></h3>
+<p>Manually blocking identities is effective for immediate threats, but maintaining an up-to-date blocklist for a large network is impractical. Reticulum supports <strong>automated list sourcing</strong>, allowing your node to subscribe to blackhole lists maintained by trusted peers, or a central authority you manage yourself.</p>
+<div class="admonition warning">
+<p class="admonition-title">Warning</p>
+<p><strong>Verify Before Subscribing!</strong>
+Subscribing to a blackhole source is a powerful action that grants that source the ability to dictate who you can communicate with. Before adding a source to your configuration, verify that the maintainer aligns with your usage policy and values. Blindly subscribing to untrusted lists could inadvertently block legitimate peers or essential services.</p>
+</div>
+<p>When enabled, your Transport Instance will periodically (approximately once per hour) connect to configured sources, retrieve their latest blackhole lists, and automatically merge them into your local blocklist. This provides “set-and-forget” protection for both individual users and large networks.</p>
+<p><strong>Configuration</strong></p>
+<p>To enable automated sourcing, add the <code class="docutils literal notranslate"><span class="pre">blackhole_sources</span></code> option to the <code class="docutils literal notranslate"><span class="pre">[reticulum]</span></code> section of your configuration file. This option accepts a comma-separated list of Transport Identity hashes that you trust to provide valid blackhole lists.</p>
+<div class="highlight-ini notranslate"><div class="highlight"><pre><span></span><span class="k">[reticulum]</span>
+<span class="na">...</span>
+<span class="c1"># Automatically fetch blackhole lists from these trusted sources</span>
+<span class="na">blackhole_sources</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">521c87a83afb8f29e4455e77930b973b, 68a4aa91ac350c4087564e8a69f84e86</span>
+<span class="na">...</span>
+</pre></div>
+</div>
+<p><strong>How It Works</strong></p>
+<ol class="arabic simple">
+<li><p>The <code class="docutils literal notranslate"><span class="pre">BlackholeUpdater</span></code> service runs in the background.</p></li>
+<li><p>For every identity hash listed in <code class="docutils literal notranslate"><span class="pre">blackhole_sources</span></code>, it attempts to establish a temporary link to the destination <code class="docutils literal notranslate"><span class="pre">rnstransport.info.blackhole</span></code>.</p></li>
+<li><p>It requests the <code class="docutils literal notranslate"><span class="pre">/list</span></code> path, which returns a dictionary of blocked identities and their associated metadata.</p></li>
+<li><p>The received list is merged with your local <code class="docutils literal notranslate"><span class="pre">blackholed_identities</span></code> database.</p></li>
+<li><p>The lists are persisted to disk, ensuring they survive restarts.</p></li>
+</ol>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>You can verify the external lists you are subscribed to, and their contents, without importing them by using <code class="docutils literal notranslate"><span class="pre">rnpath</span> <span class="pre">-p</span></code>. See the <a class="reference internal" href="#utility-rnpath"><span class="std std-ref">rnpath utility documentation</span></a> for details on querying remote blackhole lists.</p>
+</div>
+</section>
+<section id="publishing-blackhole-lists">
+<h3>Publishing Blackhole Lists<a class="headerlink" href="#publishing-blackhole-lists" title="Link to this heading">¶</a></h3>
+<p>If you are operating a public gateway, a community hub, or simply wish to share your blocklist with others, you can configure your instance to act as a blackhole list publisher. This allows other nodes to subscribe to <em>your</em> definitions of unwanted traffic.</p>
+<p><strong>Enabling Publishing</strong></p>
+<p>To publish your local blackhole list, enable the <code class="docutils literal notranslate"><span class="pre">publish_blackhole</span></code> option in the <code class="docutils literal notranslate"><span class="pre">[reticulum]</span></code> section:</p>
+<div class="highlight-ini notranslate"><div class="highlight"><pre><span></span><span class="k">[reticulum]</span>
+<span class="na">...</span>
+<span class="na">publish_blackhole</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">yes</span>
+<span class="na">...</span>
+</pre></div>
+</div>
+<p>When this is enabled, your Transport Instance will register a request handler at <code class="docutils literal notranslate"><span class="pre">rnstransport.info.blackhole</span></code>. Any peer that connects to this destination and requests <code class="docutils literal notranslate"><span class="pre">/list</span></code> will receive the complete set of identities currently present in your local blackhole database.</p>
+<p><strong>Federation and Trust</strong></p>
+<p>The blackhole system relies on the trust relationship between the subscriber and the publisher. By subscribing to a source, you are implicitly trusting that source to only block identities that are genuinely detrimental to the network.</p>
+<p>As the ecosystem matures, this system is designed to integrate with <strong>Network Identities</strong>. This allows communities to verify that a published blackhole list is actually provided by a specific network or organization with a certain level of reputation and trustworthiness, adding a layer of cryptographic trust to the federation process. This prevents malicious actors from publishing fake lists intended to censor legitimate traffic.</p>
+<p>For operators, this creates a scalable model where maintaining a single high-quality blocklist can protect thousands of downstream peers, drastically reducing the administrative overhead of network hygiene.</p>
+</section>
+</section>
<section id="improving-system-configuration">
<h2>Improving System Configuration<a class="headerlink" href="#improving-system-configuration" title="Link to this heading">¶</a></h2>
<p>If you are setting up a system for permanent use with Reticulum, there is a
@@ -1179,7 +1365,14 @@ systemctl --user enable rnsd.service
<li><a class="reference internal" href="#the-rnodeconf-utility">The rnodeconf Utility</a></li>
</ul>
</li>
+<li><a class="reference internal" href="#discovering-interfaces">Discovering Interfaces</a></li>
<li><a class="reference internal" href="#remote-management">Remote Management</a></li>
+<li><a class="reference internal" href="#blackhole-management">Blackhole Management</a><ul>
+<li><a class="reference internal" href="#local-blackhole-management">Local Blackhole Management</a></li>
+<li><a class="reference internal" href="#automated-list-sourcing">Automated List Sourcing</a></li>
+<li><a class="reference internal" href="#publishing-blackhole-lists">Publishing Blackhole Lists</a></li>
+</ul>
+</li>
<li><a class="reference internal" href="#improving-system-configuration">Improving System Configuration</a><ul>
<li><a class="reference internal" href="#fixed-serial-port-names">Fixed Serial Port Names</a></li>
<li><a class="reference internal" href="#reticulum-as-a-system-service">Reticulum as a System Service</a><ul>
@@ -1200,7 +1393,7 @@ systemctl --user enable rnsd.service
</aside>
</div>
-</div><script src="_static/documentation_options.js?v=d55fa986"></script>
+</div><script src="_static/documentation_options.js?v=fc837d61"></script>
<script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
diff --git a/docs/manual/whatis.html b/docs/manual/whatis.html
index 1d3a0d5..203082d 100644
--- a/docs/manual/whatis.html
+++ b/docs/manual/whatis.html
@@ -7,7 +7,7 @@
<link rel="prefetch" href="_static/rns_logo_512.png" as="image">
<!-- Generated with Sphinx 8.2.3 and Furo 2025.09.25.dev1 -->
- <title>What is Reticulum? - Reticulum Network Stack 1.0.5 documentation</title>
+ <title>What is Reticulum? - Reticulum Network Stack 1.1.0 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d111a655" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?v=580074bf" />
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
@@ -180,7 +180,7 @@
</label>
</div>
<div class="header-center">
- <a href="index.html"><div class="brand">Reticulum Network Stack 1.0.5 documentation</div></a>
+ <a href="index.html"><div class="brand">Reticulum Network Stack 1.1.0 documentation</div></a>
</div>
<div class="header-right">
<div class="theme-toggle-container theme-toggle-header">
@@ -204,7 +204,7 @@
<img class="sidebar-logo" src="_static/rns_logo_512.png" alt="Logo"/>
</div>
- <span class="sidebar-brand-text">Reticulum Network Stack 1.0.5 documentation</span>
+ <span class="sidebar-brand-text">Reticulum Network Stack 1.1.0 documentation</span>
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
@@ -418,9 +418,7 @@ network, and vice versa.</p>
<p>Reticulum is an experimental networking stack, and should be considered as
such. While it has been built with cryptography best-practices very foremost in
mind, it has not yet been externally security audited, and there could very well be
-privacy-breaking bugs. To be considered secure, Reticulum needs a thorough
-security review by independent cryptographers and security researchers. If you
-want to help out with this, or can help sponsor an audit, please do get in touch.</p>
+privacy-breaking bugs.</p>
</section>
</section>
@@ -495,7 +493,7 @@ want to help out with this, or can help sponsor an audit, please do get in touch
</aside>
</div>
-</div><script src="_static/documentation_options.js?v=d55fa986"></script>
+</div><script src="_static/documentation_options.js?v=fc837d61"></script>
<script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/scripts/furo.js?v=46bd48cc"></script>
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────